plists を使用してデータを保存する既存の大規模なアプリがあります。現在選択されているアイテム、現在のユーザー、およびその他のさまざまな現在の選択を示すアプリケーションの状態をユーザーのデフォルトに保存します。データがplistにある場合、これはうまくいきました。現在、plist の代わりに Core Data を使用するようにリファクタリングしています。オブジェクト インスタンスへの参照を、現在表示されているオブジェクトとして保存したいと考えています。sqlite と Core Data がデータベースにこのオブジェクトの ID を持っていることは知っていますが、ユーザーのデフォルトに何を保存すればよいかわかりません。次の 3 つのオプションが思い浮かびます。
- 独自のシーケンシャル ID を生成し、それを「現在」として記憶したいオブジェクトと共に保存し、その ID をユーザーのデフォルトに保存します。
NSManagedObjectID を使用して、ユーザーのデフォルトに保存してみてください。次のように文字列に変換できると「思います」。これは機能しますか?
NSString *stringID = [[[managedObject objectID] URIRepresentation] absoluteString];
Core Data に現在の状態のエンティティを作成できます。これはシングルトンで、行は 1 つだけです。このエンティティは、追跡したい現在のオブジェクトと対 1 の関係を持つことができます。
最適な設計を考慮したアプローチの提案を歓迎します。
コメントから繰り返しますが、#2 にアプローチする欠点は何ですか? ウェブ上で相反するアカウントを読みました。オブジェクト ID は移行間で一貫していないと言う人もいますが、Apple 自体がこれを解決策として提案しているようです。
NSManagedObjectID の Apple クラス リファレンスでは、まさにこのケースについて説明し、ID をユーザーの既定値に保存することについて説明しています。「オブジェクト ID は、特定のオブジェクトを参照するために後でアーカイブおよび再作成できる URI 表現に変換できます (managedObjectIDForURIRepresentation: (NSPersistentStoreCoordinator) および objectWithID: (NSManagedObjectContext を使用)。たとえば、最後に選択されたグループアプリケーションは、グループ オブジェクトの ID を介してユーザー デフォルトに保存できます。」
これは、オブジェクト ID の URI 表現が、移行後も常に有効であることを意味するのでしょうか?