我有一个包含4个实体的CoreData模型。
模特截图 - > http://img96.imageshack.us/img96/7857/screenshot20100209at182.png
国家
-StateName
位置:
-locationName(attribute)
-locationDescription
-locationActivities(relatinship)
-state(relationship)
LocationActivities:
-location(relationship)
- 活动(关系)
活动
-activityName(属性)
-locationsActivities(relationship)
如何编写选择具有
的所有位置的查询(活动='高尔夫'或活动= '游泳')和州='洛杉矶'
答案 0 :(得分: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];
基本上,正常进行核心数据提取,然后构建适当的谓词来过滤结果(如Predicate Programming Guide中所述)。
答案 1 :(得分:1)
我刚注意到,在您的屏幕截图中,您的LocationActivities
实体实际拼写为LocationAtivities
(请注意缺少的“c”)。
这足以破坏你的图表。任何查找LocationActivities
的谓词都将失败。
这样的错误让我讨厌编程。我似乎花了更多的时间来追踪拼写错误而不是修复设计错误。
答案 2 :(得分:-1)
另外,您需要停止考虑核心数据的表和查询。在Core Data中,只有sqllite持久存储的细节,你永远不会看到它们或处理它们。
实体不是表,关系不是表链接。试图将对象模型塞进脑中的SQL会让你感到悲伤,因为Core Data不像SQL那样工作。