我正在尝试在我的应用程序中实现剪切,复制,粘贴。我想要存储在UIPasteboard上的Items是NSManagedObject的子类。
我跟着this answer,直到我需要复制关系才很棒。我从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
所以看起来它试图制作一个relarionship实体的副本,而不是指向实体的关系指针。
我不想复制实际的关系实体本身,只是指向它的指针。 因此,当我粘贴新项时,我创建一个新的NSManagesObject,然后可以将原始NSManagedObject中引用的实体与新的NSManagedObject相关联。
似乎手动复制所有属性和关系的全部原因是因为encodeWithCoder和托管对象不能很好地播放。
即使提到必须调用[super initWithEntity:insertIntoManagedObjectContext:]
的答案也没有提及复制指向实体关系的指针。
我也可以为每个关系实体NSManagedObject创建我的存档,但是当我创建新的Master时,我不会引用现有的关系实体,但会创建一个新的...
谢谢, 斯科特< -