アプリケーションにカット、コピー、ペーストを実装しようとしています。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 ごとにアーカイブを作成することもできますが、新しいマスターを作成するときは、既存の関係エンティティを参照するのではなく、新しい関係エンティティを作成することになります...
ありがとう、スコット<-