Ios 核心数据获取关系对象

Ios 核心数据获取关系对象,ios,core-data,Ios,Core Data,在我的应用程序中,我有两个实体:成员和列表。它们都有一对多关系(成员可以有多个列表,列表可以有多个成员)。现在我想获取属于特定成员的列表。这是我的密码: WSAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; NSManagedObjectContext *context = [appDelegate managedObjectContext]; NSFetchRequest *fetchReque

在我的应用程序中,我有两个实体:成员和列表。它们都有一对多关系(成员可以有多个列表,列表可以有多个成员)。现在我想获取属于特定成员的列表。这是我的密码:

WSAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

NSManagedObjectContext *context = [appDelegate managedObjectContext];

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Lists" inManagedObjectContext:context];

[fetchRequest setEntity:entity];

NSPredicate *predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"has_members contains[cd] %@", [self.currentMember valueForKey:@"name"]]];

[fetchRequest setPredicate:predicate];

NSError *error;
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
    // Handle the error.
    NSLog(@"NO LISTS AVAILABLE IN REFRESH");
}
self.currentMember是用户自己的托管对象

注:成员有名称,(NSSet*)成员

列表有列表名,有成员


问题:当我运行代码时,它在FetchedObject数组中中断。我怀疑NSPredicate有问题,但我不知道在哪里以及如何修复它。有人能指出问题吗?

首先,您描述的
成员(以复数形式调用实体)和
列表
之间的关系是多对多的。

其次,您没有使用CoreData固有的对象图功能,而是在实体之间“滚动您自己的”关系(您应该使用界面生成器对两个实体之间的CoreData关系建模)。

看看怎么做。

在对数据建模之后,谓词应该如下所示:

//Not tested
NSPredicate* p = [NSPredicate predicateWithFormat:@"ANY members = %@",self.currentMember];

不要传递格式化字符串来创建谓词,使用
NSPredicate
格式化来替换参数,否则(在大多数情况下)您将无法实现您的目标。

首先,您描述的
成员
之间的关系(以复数形式调用实体会令人困惑)而且
列表
是多对多。

其次,您没有使用CoreData固有的对象图功能,而是在实体之间“滚动您自己的”关系(您应该使用界面生成器对两个实体之间的CoreData关系建模)。

看看怎么做。

在对数据建模之后,谓词应该如下所示:

//Not tested
NSPredicate* p = [NSPredicate predicateWithFormat:@"ANY members = %@",self.currentMember];

不要传递格式化字符串来创建谓词,使用
NSPredicate
格式化来替换参数,否则(在大多数情况下)您将无法实现您的目标。

首先,您描述的
成员
之间的关系(以复数形式调用实体会令人困惑)而且
列表
是多对多。

其次,您没有使用CoreData固有的对象图功能,而是在实体之间“滚动您自己的”关系(您应该使用界面生成器对两个实体之间的CoreData关系建模)。

看看怎么做。

在对数据建模之后,谓词应该如下所示:

//Not tested
NSPredicate* p = [NSPredicate predicateWithFormat:@"ANY members = %@",self.currentMember];

不要传递格式化字符串来创建谓词,使用
NSPredicate
格式化来替换参数,否则(在大多数情况下)您将无法实现您的目标。

首先,您描述的
成员
之间的关系(以复数形式调用实体会令人困惑)而且
列表
是多对多。

其次,您没有使用CoreData固有的对象图功能,而是在实体之间“滚动您自己的”关系(您应该使用界面生成器对两个实体之间的CoreData关系建模)。

看看怎么做。

在对数据建模之后,谓词应该如下所示:

//Not tested
NSPredicate* p = [NSPredicate predicateWithFormat:@"ANY members = %@",self.currentMember];

不要传递格式化字符串来创建谓词,使用
NSPredicate
格式化来替换参数,否则您将无法实现目标(大多数情况下).

您希望将所有记录与某个记录相对应……您希望将所有记录与某个记录相对应……您希望将所有记录与某个记录相对应……您希望将所有记录与某个记录相对应。。。