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 的麻烦。有人可以确认是这种情况吗?有必要这么难吗?

4

1 回答 1

1

你没有仔细阅读那个文件。在Custom Employee Logic部分中,它解释了由于那里描述的几个原因,不会复制关系。然后解释代码如何处理仅复制特定属性。就选择要复制的特定属性而言,您似乎遵循了文档,而不是忽略了关系。

至于你看到的错误,

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

发生这种情况是因为您正在调用archivedDataWithRootObject:包含不符合的对象的字典NSCoding,特别是您的托管对象。像这样的归档仅适用于属性列表类型——对于其他所有内容,您必须实现NSCoding,否则会出现此错误。

如果要复制关系,复制托管对象 ID 的 URI 可能是合理的。如果您在使用临时对象 ID 时遇到问题,请执行以下操作之一:

  • 保存更改
  • 调用obtainPermanentIDsForObjects:error:对象获取永久 ID 而不保存。
于 2013-03-23T19:23:17.167 回答