在创建Core Data实体(Event)期间,我正在创建与另一个实体(Team)的关系。这种关系从团队到事件(一个团队,许多事件)是多对一的,并且从事件到团队具有反向关系。
团队及LT; ----->>事件
两种关系的删除规则都设置为“Nullify”。
在创建每个事件期间创建新团队时,下面的代码块在第一个人口中成功运行。但是,如果我然后删除一个事件并尝试重新添加它,则会检索现有的团队,但是在尝试将Team对象添加到示例的最后一行中的Event时,代码会失败。错误如下:-[__NSCFDictionary managedObjectContext]: unrecognized selector sent to instance 0x699ed60
在Event对象与已存在的Team对象之间创建关系的正确方法是什么?
Team *currentTeam = self.team;
Team *newTeam = (Team *)[self loadTeamForNid:[NSNumber numberWithInteger: [teamNid integerValue]]];
// If the nid of the referenced team has changed,
if (![[[currentTeam nid] stringValue] isEqualToString:teamNid]) {
currentTeam = nil;
currentTeam = newTeam;
}
// If an event has not been set by this point, it does not exist in the CD store, and we need to create it.
if (currentTeam == nil) {
currentTeam = (Team *)[NSEntityDescription insertNewObjectForEntityForName:@"Team" inManagedObjectContext:[delegate managedObjectContext]];
[currentTeam populateTeamWithNode:[node nodeGet:teamNid]];
}
// TODO: This breaks on reload of an object
// self.team = currentTeam;
[self setValue:currentTeam forKey:@"team"];
答案 0 :(得分:3)
从概念上讲,您没有错:您将事件的“团队”属性设置为代表相应团队的NSManagedObject实例。
这个消息:
-[__NSCFDictionary managedObjectContext]: unrecognized selector sent to instance 0x699ed60
意味着某些代码行正在处理NSDictionary
的实例,它期望(我假设)NSManagedObject
的实例。当它尝试查询对象的managedObjectContext
时,会抛出异常,因为NSDictionary没有为该选择器实现一个方法。
要做的第一件事是在最后一行放置一个断点,看看currentTeam
实际上是伪装的NSDictionary。 (这似乎不太可能,因为上面的代码会在之前遇到异常。)如果没有,你将不得不寻找可能涉及此代码路径的相关属性。
请注意,Core Data支持获取请求样式,它返回NSDictionary实例而不是NSManagedObjects;如果你在代码中的任何地方使用它,你可能会意外地将结果传递给另一个不期望它的方法。