2011-06-22 71 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;如果您在代碼中的任何位置使用此代碼,則可能會意外地將結果傳遞給另一個不期望它的方法。

相關問題