过滤核心数据(父实体和子实体)

时间:2014-06-24 19:50:08

标签: ios core-data filter

两天我一直试图过滤CoreData,但我仍然卡住了。 这是我的模特:

Users < --- >> Sessions

我设法创建了新会话和特定用户之间的关系。我还设法通过以下代码获取所有用户的列表以在tableview中显示它们:

NSFetchRequest *request = [[NSFetchRequest alloc]init];
NSEntityDescription *usersDescription= [NSEntityDescription entityForName:@"Users" inManagedObjectContext:_managedObjectContext];
[request setEntity:usersDescription];

NSError  *error = nil;
NSMutableArray *mutableFetchresults = [[_managedObjectContext executeFetchRequest:request error:&error]mutableCopy];
if(mutableFetchresults == nil) {
    //handle error
}

usernameDataMutableArray = [[NSMutableArray alloc]init];
for (int i = 0; i< [mutableFetchresults count]; i++)
{ Users* users = (Users *) [mutableFetchresults objectAtIndex:i];
    [usernameDataMutableArray insertObject: [users username] atIndex:i];
}

现在,当我触摸名为&#34; Username1&#34;的单元格时,我会显示一个新的tableView。我想在此表中显示所有Username1会话。

所以我的问题是:如何过滤所有会话以检索属于Username1的会话?

1 个答案:

答案 0 :(得分:2)

不需要过滤器。

当您按下新视图控制器时,您将移交所选的Users实例。然后在新的视图控制器中,您向Users的实例询问与其关联的Sessions个实例。

NSSet *sessionsSet = [myUser valueForKey:@"sessions"];

如果设置了子类,也可以使用属性。

这是核心数据的重点。它是一个对象图,关系是对象实例上的属性。只需调用适当的方法。

我强烈建议您阅读一本关于核心数据的书籍,因为它将清除您在使用这些基本概念时遇到的许多问题。

其他评论

实体不应以复数形式命名。您的实体应该被称为UserSession而不是复数形式。指向to-many的关系的名称应该是复数,指向to-one的名称应该是单数。这有助于提高代码清晰度和可维护性。多个倾向于指示对象的集合而不是像现在一样的单个对象。