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 ごとにアーカイブを作成することもできますが、新しいマスターを作成するときは、既存の関係エンティティを参照するのではなく、新しい関係エンティティを作成することになります...

ありがとう、スコット<-

4

0 に答える 0