gpt4 book ai didi

cocoa - 归档具有关系的核心数据实体

转载 作者:行者123 更新时间:2023-12-03 17:54:35 24 4
gpt4 key购买 nike

我希望能够支持显示核心数据实体的表格 View 行的复制和粘贴。该实体具有一个属性和两种关系。当我使用 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 的麻烦。有人可以确认情况是这样吗?有必要这么难吗?

最佳答案

您还没有仔细阅读该文档。在自定义员工逻辑部分中,它解释了由于其中描述的多种原因,关系不会被复制。然后解释代码如何处理仅复制特定属性。看来您遵循了文档来选择要复制的特定属性,但没有忽略关系。

至于您看到的错误,

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

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

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

  • 保存更改
  • 调用obtainPermanentIDsForObjects:error:让对象获取永久ID而不保存。

关于cocoa - 归档具有关系的核心数据实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15584042/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com