より簡単なオプションのための辞書ソリューションを提案します。しかし、ここで私はどのように問題を解決したのですか?私のモデルは、既に大規模で堅牢で、カスタムクラスと1つのルートクラスがNSManagedObject
を超えています。 [super initWithEntity:insertIntoManagedObjectContext:]
:
私が必要なのは、適切な指定イニシャライザNSManagedObject
のを呼び出すためにその単一のクラスのためでした。このメソッドとNSEntityDescription
のメタデータは、すべてのダイナミックアクセサの実装を設定します。
- (id)initWithCoder:(NSCoder *)aDecoder {
CoreDataStack *cds = [LibraryDiscoverer unarchivingCoreDataStack];
NSEntityDescription *entity = [cds entityDescriptionForName:[[self class] entityName]];
NSManagedObjectContext *moc = [cds managedObjectContext];
self = [super initWithEntity:entity insertIntoManagedObjectContext:moc];
self.lastEditDate = [aDecoder decodeObjectForKey:@"lastEditDate"];
return self;
}
CoreDataStack
は、CoreDataを抽象化したものです。 LibraryDiscoverer
は、コアデータ情報を保持するグローバルアクセスフックです。 entityName
は、クラス名からエンティティ名を提供するために定義されたメソッドです。命名規則(クラス名=エンティティ名)に従うと、一般的に実装できます。
私のクラス階層内の他のすべてのinitWithCoder:
メソッドは、標準NSCoder
であり、関係の両方向をエンコードする必要はないことに注意してください。CoreDataはそれを再接続します。 (辞書ソリューションを含めて常にそうであるように)
私はこの同じ問題を抱えていましたが、バリーが示唆していることを正確に行いました。 – jeff7091
それはNSDictionaryの代わりにうまくいくでしょうか、私はNSManagedObjectのモデルと全く同じモデルを持っていますか?そこにマッピングをしますか? – bluezald
NSURLでエンコードされたNSManagedObjectIDがどのように関係に役立つのか誰でも説明できますか?ありがとう! –