1

我正在尝试在我的应用程序中实现剪切、复制、粘贴。我想在 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 时,我不会引用现有的关系实体,而是会创建一个新的...

谢谢,斯科特<-

4

0 回答 0