我正在尝试在我的应用程序中实现剪切、复制、粘贴。我想在 UIPasteboard 上存储的项目是 NSManagedObject 的子类。
我遵循了这个答案,在我需要复制这些关系之前,它一直很棒。我从self.entity.attributesByName.allKeys
for (NSString *theKey in self.entity.attributesByName.allKeys) {
id theValue = [self valueForKey:theKey];
if (theValue) {
[screenCDElementDict setObject:theValue forKey:theKey];
}
}
然后添加self.entity.relationshipsByName.allKeys
for (NSString *theKey in self.entity.relationshipsByName.allKeys) {
id theValue = [self valueForKey:theKey];
if (theValue) {
[screenCDElementDict setObject:theValue forKey:theKey];
}
然后最终只使用self.entity.propertiesByName.allKeys
for (NSString *theKey in self.entity.propertiesByName.allKeys) {
id theValue = [self valueForKey:theKey];
if (theValue) {
[screenCDElementDict setObject:theValue forKey:theKey];
}
}
screenCDElementDict
当我用声明归档时
[archiver encodeObject:screenCDElementDict forKey: @"TheObject"];
我收到一条错误消息:
-[MyNSManagesObjectRelation encodeWithCoder:]: unrecognized selector sent to instance 0x72db3d0
所以看起来它正在尝试复制关系实体,而不是指向实体的关系指针。
我不想复制实际的关系实体本身,只是指向它的指针。因此,当我粘贴新项目时,我会创建一个新的 NSManagesObject,然后可以将引用的实体从原始 NSManagedObject 关联到新的 NSManagedObject。
似乎手动复制所有属性和关系的全部原因是因为 encodeWithCoder 和托管对象不能很好地发挥作用。
即使提到必须调用的答案[super initWithEntity:insertIntoManagedObjectContext:]
也没有提到任何关于复制指向实体关系的指针。
我也可以为每个关系实体 NSManagedObject 创建我的存档,但是当我创建新的 Master 时,我不会引用现有的关系实体,而是会创建一个新的...
谢谢,斯科特<-