两天我一直试图过滤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的会话?
答案 0 :(得分:2)
不需要过滤器。
当您按下新视图控制器时,您将移交所选的Users
实例。然后在新的视图控制器中,您向Users
的实例询问与其关联的Sessions
个实例。
NSSet *sessionsSet = [myUser valueForKey:@"sessions"];
如果设置了子类,也可以使用属性。
这是核心数据的重点。它是一个对象图,关系是对象实例上的属性。只需调用适当的方法。
我强烈建议您阅读一本关于核心数据的书籍,因为它将清除您在使用这些基本概念时遇到的许多问题。
实体不应以复数形式命名。您的实体应该被称为User
和Session
而不是复数形式。指向to-many的关系的名称应该是复数,指向to-one的名称应该是单数。这有助于提高代码清晰度和可维护性。多个倾向于指示对象的集合而不是像现在一样的单个对象。