是的,你需要使用NSPredicate来获得与特定用户的数据。如果你正在填充一个UICollection视图,那么我会建议读取NSFetchedResultsController。
NSFetchRequest *fetchRequestItems = [[NSFetchRequest alloc] init];
NSEntityDescription *entityItem = [NSEntityDescription entityForName:@"Routine" inManagedObjectContext:self.managedObjectContext];
[fetchRequestItems setEntity:entityItem];
User* myUser = //Code for getting current user out of data store based on some paramator
[fetchRequestItems setPredicate:[NSPredicate predicateWithFormat:@"userID == %@",myUser]];
//Sort by last edit ordered
NSArray *sortDescriptors = [NSArray arrayWithObjects:nil];
[fetchRequestItems setSortDescriptors:sortDescriptors];
NSArray* Routines = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
这里要注意的一点是,你需要建立反向关系,在你的日常/运动对象来比较谓词当前用户。你有哪些我认为是反向关系的用户ID?
所以从评论我带你没有设置反比关系,所以这里是一个粗略的例子。使该用户的日常你这样做的时候
User *thisUser = [NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:self.managedObjectContext];
thisUser.eMail = emailAddress.text;
//And any other paras you might have
然后:
Routine *newRoutine = [NSEntityDescription insertNewObjectForEntityForName:@"Routine" inManagedObjectContext:managedObjectContext];
newRoutine.userId = thisUser;
然后确保
当使您的商店一个新的用户,您将获得somethign这样保存管理对象以将更改写入数据存储。然后这将链接常规端的2个对象,不要忘记将它链接到用户端,以实现严格的反向关系。
,以获取用户的完全像我上面提到的:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"User" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSError* error;
NSArray* Users = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
如果数组中有1个用户,然后它的第一要素,如果你有很多用户,然后使用谓词基础上找到了一个你的FB ID。
停止思考CoreData是数据库术语。一旦你有你的用户,你所要做的就是myUser.routines(或者你的任何关系)。把关系看作属性。 – sosborn 2013-04-28 17:40:57