我的Xcode项目中有一个非常复杂的Core Data模型。为简单起见,我在这里只说我的模型包括与团队有多对多关系的游戏,而每个团队都与玩家有多对关系。这三个实体都具有自己的属性(例如gameLocation,teamScore,playerNumber等)。
由于Restkit向Ruby on Rails构建的网站提出了大量的GET请求,因此我的数据库已完全填充。所以现在,我想开始使用此数据-显示和修改它。我知道这涉及提取请求和谓词,但是我不知道何时何地需要执行这些提取。我可以获取一个游戏,然后从该游戏中访问与该游戏相关的所有内容吗?例如,这是我的代码,用于提取今天计划的所有游戏:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *desc = [NSEntityDescription entityForName:@"Game" inManagedObjectContext:self.managedObjectContext];
[request setEntity:desc];
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"time" ascending:YES];
[request setSortDescriptors:@[sort]];
/*** some code that determines the values for variables 'todaysDate' and 'tomorrowsDate' ***/
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(date >= %@) AND (date < %@)", todaysDate, tomorrowsDate];
[request setPredicate:predicate];
NSError *error = nil;
self.games = [self.managedObjectContext executeFetchRequest:request error:&error];
但是现在呢?访问这些游戏团队的最佳方法是什么?我需要更多的提取请求还是效率低下?我尝试了类似的方法,但似乎不正确
Game *game1 = [self.games objectAtIndex:0];
NSMutableSet *game1Teams = [game1 mutableSetValueForKey:@"gameTeams"];
不仅是团队,我如何获得那些游戏团队的分数?那些游戏的玩家?等等...
(也许对本教程的引用或一些示例代码对我来说是个好地方,因为我敢肯定这是微不足道的东西)
关键短语是这样的:
“我可以获取一个游戏,然后从该游戏中访问与该游戏相关的所有内容吗?”
答案是“是”。
通过简单地引用指向实体中定义的集合(或其他任何东西)的指针,就可以基于单个获取请求遍历整个“树”,并允许Core Data在需要加载各种实体时进行处理。
首先,这对我来说没有任何意义,但是当我退出战斗时,发现它比我想象的要容易得多。
这是我的一个项目:
@property (nonatomic, retain) NSString * goalName;
@property (nonatomic, retain) NSData * goalPicture;
@property (nonatomic, retain) NSNumber * indexOrder;
@property (nonatomic, retain) NSNumber * wordPicture;
@property (nonatomic, retain) NSSet *item;
@property (nonatomic, retain) User *user;
@property (nonatomic, retain) NSSet *video;
在我的情况下,用户是树中的顶级节点,每个目标下可以有多个项目,也可以有多个视频。
完成对给定用户的获取请求后,便可以使用用户实体中的NSSet来访问该用户的目标。因此,我得到了以下目标:
NSSet *goals = userObj.goal;
Goal *g = [goals anyObject]; // for example.
然后,如果我要让项目“包含”在给定的目标内:
NSSet *items = g.items;
Item *i = [items anyObject];
等等。重要的是核心数据将有效地加载实体。如果您将10,000个项目附加到特定目标,则不必担心这些项目在实际需要之前会被获取...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句