2013-03-23 39 views
0

我希望能夠支持複製和粘貼顯示核心數據實體的tableview行。這個實體有一個屬性和兩個關係。當我使用Apple推薦的字典存檔技術(來自'NSPersistentDocument核心數據教程')時,我發現這些關係會引發錯誤。這裏就是發生問題的代碼的關鍵一環:存檔具有關係的核心數據實體

for (id sectionObject in selectedSectionsArray){ 
    NSDictionary *thisDictionary = [sectionObject dictionaryRepresentation]; // 'sectionObject' has 1 attribute and 2 relationships (one-to-many) 
    [copyObjectsArray addObject:[sectionObject dictionaryRepresentation]]; 
} 
NSPasteboard *generalPasteboard = [NSPasteboard generalPasteboard]; 
[generalPasteboard declareTypes:[NSArray arrayWithObjects:MSSectionsPBoardType, NSStringPboardType, nil] owner:self]; 
NSData *copyData = [NSKeyedArchiver archivedDataWithRootObject:copyObjectsArray]; // Here's where it crashes. ERROR MESSAGE: "-[NSManagedObject encodeWithCoder:] unrecognized selector sent to instance 0x22fd410" 

因此,似乎有關係複製到剪貼板必須存檔其URI的唯一途徑。在那種情況下,我必須處理引用臨時ID的頭痛問題。有人可以確認這是事實嗎?它是否必須如此努力?

+0

您能提供「NSPersistentDocument核心數據教程」的鏈接嗎?我發現只有標題頁上顯示「不推薦」的Mac OS X 10.4版本。 – 2013-03-23 09:09:41

回答

1

您尚未仔細閱讀該文檔。在部分自定義員工邏輯,它解釋了關係將不復制有幾個原因在那裏描述。然後它解釋了代碼如何處理只複製特定屬性。看起來你似乎只是選擇了特定的屬性來複制文檔,而不是遺漏關係。

至於你看到的錯誤,

-[NSManagedObject encodeWithCoder:] unrecognized selector sent to instance 0x22fd410 

這是因爲你在包含不符合NSCoding,具體地說,管理對象的對象字典調用archivedDataWithRootObject:。像這樣的歸檔只適用於屬性列表類型 - 對於其他所有內容,您必須執行NSCoding,否則您會收到此錯誤。

如果要複製關係,複製託管對象ID的URI可能是合理的。如果您在使用臨時對象ID問題,請執行下列操作之一:

  • 保存更改
  • 呼叫obtainPermanentIDsForObjects:error:爲對象,以得到永久編號不保存。
相關問題