私が取り組んでいるプロジェクトでは、複数の永続ストアがあり、フェッチされたプロパティがエンティティで定義され、さまざまなストアに存在するオブジェクトへのアクセスを提供します。
Editor
->を実行するCreate NSManagedObject Subclass
と、フェッチされたプロパティはサブクラスに入力されないため、このエンティティを使用する別のコントローラーではアクセスできません。
私の好奇心は、これらのオブジェクトを使用できるようにサブクラスで定義する方法です。
たとえば、下に「Some Object」というオブジェクトがあり、このオブジェクトに「imageFile」というフェッチされたプロパティがあるとします (File オブジェクトは別のストアにあるため、直接参照することはできません)。
class SomeObject: NSManagedObject {
@NSManaged var name: String
@NSManaged var id: String
@NSManaged var imageID: String
@NSManaged var imageFile: File //Not generated automatically like the rest
}
残念ながら、上記の試みは次のエラーで失敗します。
インスタンス 0x60800865de50 に送信された認識されないセレクター
私の質問は一言で言えば、取得したプロパティにどのようにアクセスするのか、またはそれらを参照するための構文は何かということです。
「フェッチされたプロパティを使用しないでください」または「永続ストアを 1 つだけ使用してください」という回答はしないでください。通常のリレーションシップの使用方法は既に知っているので、Core Data のこの機能を活用する方法を知りたいです。前もって感謝します!
アップデート
以下に投稿された解決策のいくつかを試してみると、役に立つかもしれない興味深い情報に出くわしました。「po someObject」を使用してオブジェクトを出力したところ、出力の data 属性の下に次のように表示されて驚きました。
imageFile = "<relationship fault: 0x618000043930 'imageFile'>";
imageID = "some Id"
ただし、someObject.imageFile を使用して imageFile にアクセスしようとすると、アクセスできません。valueForKey["imageID"] を使用して参照を取得できますが、File へのキャストで毎回失敗します。オブジェクトを印刷すると、次のようになります。
Optional(Relationship fault for (<NSFetchedPropertyDescription: 0x6180000e1780>), name imageFile, isOptional 1, isTransient 1, entity SomeObject...
最終更新
これにより、valueForKey["imageID"]
フォールトがトリガーされ、プロパティがフェッチされます。ファイルで属性が反転していたため、最初は属性xcdatamodelid
が見つかりませんでした。