2011-06-22 70 views
1

在创建Core Data实体(Event)期间,我创建了与另一个实体(Team)的关系。这种关系从团队到事件(一个团队,许多事件)是多对一的,并且事件与团队之间存在反向关系。如何创建从一个实体到另一个实体的核心数据关系?

团队< ----- >>事件。

两个关系的删除规则都设置为'Nullify'。

当在创建每个事件期间创建新团队时,下面的代码块可成功地在第一群体上成功运行。但是,如果我然后删除了一个事件并尝试重新添加该事件,则会检索现有的团队,但在尝试将Team对象添加到该示例最后一行中的事件时代码失败。错误如下:-[__NSCFDictionary managedObjectContext]: unrecognized selector sent to instance 0x699ed60

在事件对象与已存在的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

什么是错误?这种关系是否相反?删除规则是什么? – benzado

+0

@Benzado:我已经更新了这个问题以包含这些细节。 – markdorison

回答

3

从概念上说,你没有弄错:你将事件的“团队”属性设置为代表相应团队的NSManagedObject实例。

此消息:

-[__NSCFDictionary managedObjectContext]: unrecognized selector sent to instance 0x699ed60 

是指当它期望(I假设)的一些代码线被处理的NSDictionary实例的NSManagedObject一个实例。当它试图查询对象的managedObjectContext时,会抛出一个异常,因为NSDictionary没有为该选择器实现一个方法。

要做的第一件事是在最后一行放置一个断点,看看currentTeam实际上是否是变相的NSDictionary。 (这看起来似乎不太可能,因为上面的代码会碰到一个异常。)如果不是这样,你将不得不寻找可能涉及此代码路径的相关属性。

请注意,核心数据支持取回请求样式,其中它返回NSDictionary实例而不是NSManagedObjects;如果您在代码中的任何位置使用此代码,则可能会意外地将结果传递给另一个不期望它的方法。

相关问题