2010-02-09 28 views
6

Tôi có một mô hình CoreData với 4 thực thể.Dữ liệu cốt lõi: Dành cho các mối quan hệ nhiều người

mẫu ảnh chụp màn hình ->http://img96.imageshack.us/img96/7857/screenshot20100209at182.png

Nhà nước

-StateName

Location:

-locationName (attribute)

-locationDescription

-locationActivities (relatinship)

-state (relationship)

LocationActivities:

-location (relationship)

-activity (relationship)

hoạt động

-activityName(attribute)

-locationsActivities (relationship)

Làm thế nào tôi có thể viết một truy vấn mà chọn tất cả địa điểm có

(activity = 'Golf' OR activity = 'Swimming') AND state = 'LA'

Trả lời

5
// With some NSManagedObjectContext *moc 
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease]; 
[request setEntity:[NSEntityDescription entityForName:@"Location" 
           inManagedObjectContext:moc]]; 
[request setPredicate:[NSPredicate predicateWithFormat: 
         @"(locationActivities.activity.activityName == %@ OR 
          locationActivities.activity.activityName == %@) AND 
         state.stateName == %@", 
         @"Golf", @"Swimming", @"LA"]]; 
NSError *error; 
NSArray *results = [moc executeFetchRequest:request error:&error];

Về cơ bản, làm một dữ liệu cốt lõi lấy như bình thường, sau đó xây dựng vị từ thích hợp để lọc kết quả (như được mô tả trong Predicate Programming Guide).

+0

điều gì về bảng liên kết LocationActivities? –

+0

Đã sửa lỗi, nhưng tại sao thực thể đó lại ở nơi đầu tiên? Bạn có thể (tôi tin) chỉ đơn giản là có mối quan hệ một-nhiều từ Vị trí đến Hoạt động. – Tim

+0

tính năng này không hoạt động. tôi nhận được lỗi: 'không có nhiều khóa không được phép ở đây'. Tôi đã thêm một thực thể khác theo đề xuất của http://stackoverflow.com/questions/1903177/coredata-many-to-many-relationships-and-nspredicate –

-1

Ngoài ra, bạn cần dừng suy nghĩ về các bảng và truy vấn cho Dữ liệu cốt lõi. Trong dữ liệu cốt lõi những chi tiết cụ thể của chỉ lưu trữ sqllite liên tục và bạn không bao giờ nhìn thấy chúng hoặc đối phó với chúng.

Thực thể không phải là bảng và mối quan hệ không liên kết bảng. Việc cố gắng nhồi nhét mô hình đối tượng vào một câu lệnh SQL trong đầu của bạn sẽ dẫn bạn đến nỗi đau vì dữ liệu lõi không hoạt động như SQL.

1

Tôi vừa nhận thấy rằng trong ảnh chụp màn hình của bạn, thực thể LocationActivities của bạn thực sự được viết là LocationAtivities (ghi chú "c" bị thiếu).

Điều đó là đủ để phá hỏng biểu đồ của bạn. Bất kỳ vị ngữ nào tìm kiếm LocationActivities sẽ không thành công.

Các lỗi như vậy khiến tôi ghét lập trình. Tôi dường như dành nhiều thời gian theo dõi lỗi chính tả hơn là tôi sửa lỗi thiết kế.

Các vấn đề liên quan