私のアプリには、NSDictionary
キーが のサブクラスのインスタンスである がありますNSManagedObject
。
ただし、問題はNSManagedObject
、プロトコルが実装されていないことです。つまり、メソッドが正常に機能していても、 NSCopying
Core Data オブジェクト/インスタンスをNSManagedObject
辞書キーとして使用することはできません。-[hash]
するべきでしたか?
私のアプリには、NSDictionary
キーが のサブクラスのインスタンスである がありますNSManagedObject
。
ただし、問題はNSManagedObject
、プロトコルが実装されていないことです。つまり、メソッドが正常に機能していても、 NSCopying
Core Data オブジェクト/インスタンスをNSManagedObject
辞書キーとして使用することはできません。-[hash]
するべきでしたか?
[[[myManagedObject objectID] URIRepresentation] absoluteString] をキーとして使用することをお勧めします。
同様の問題があり、いくつかのエンティティをそれぞれに追加のデータでバンドルする必要があり、最初に試しました:
@{entity1:data1, @entity2:data2, @entity3:data3}
これは上記の理由 (NSCopying) で機能しなかったため、次のようにしました。
@[
@{@"entity":entity1, @"data":data1},
@{@"entity":entity2, @"data":data2},
@{@"entity":entity3, @"data":data3}
]
ただし、このソリューションは、これらのエンティティへの辞書スタイルのアクセスを必要としない場合、または必要なものを見つけるために喜んで反復する場合にのみ意味があります。私の場合、これはパッケージングの問題でした。これらのエンティティを NSManagedObjectContext で渡す場合、それらを使用するには同じである必要があることに注意してください。
ディクショナリ キーとして使用する NSManagedObject のインスタンスへの参照を含むラッパー クラスを作成できますか? 次に、このラッパー クラスにハッシュ メソッド (おそらく NSManagedObject のハッシュ メソッドを呼び出すだけ) と共に NSCopying を実装させ、このラッパーを辞書キーとして使用することができます。