14

この素晴らしい NSManagedObjectID を見つけました。これは、Entity/NSManagedObject/NSEntityDescription を参照するのに非常に適していますよね?
エンティティから ID を取得しましょう。

NSEntityDescription *entity = [self newEntity];     
NSManagedObjectID *objID = [entity objectID];

だから...これobjIDを文字列に入れる方法はありますか?またはそれ以上: NSData. 実際には、それを NSUserDefaults に保存できるようにするためのものです。;-)

ところで:私の場合、 NSFetchRequest は機能したくありません。この例の修正版を使用します: answer of an old question

4

6 に答える 6

39

NSManagedObjectのに対応するアーカイブされた URI を取得するにはobjectID:

NSManagedObject* myMO;
...
NSURL *uri = [[myMO objectID] URIRepresentation];
NSData *uriData = [NSKeyedArchiver archivedDataWithRootObject:uri];

元の管理対象オブジェクトのインスタンスに戻るには、そのインスタンスを保持する永続ストアが既にNSPersistentStoreCoordinator. それで:

NSData *uriData;
NSPersistentStoreCoordinator *psc;
NSManagedObjectContext *moc; //with moc.persistentStoreCoordinator = psc.
...
NSURL *uri = [NSKeyedUnarchiver unarchiveObjectWithData:uriData];
NSManagedObjectID *moID = [psc managedObjectIDForURIRepresentation:uri];
NSManagedObject *myMO = [moc objectWithID:moID];
于 2009-02-05T16:45:29.063 に答える
5

NSManagedObjectIDドキュメントから:

オブジェクト ID は、特定のオブジェクトを参照するために後でアーカイブおよび再作成できる URI 表現に変換できます (managedObjectIDForURIRepresentation: (NSPersistentStoreCoordinator) および objectWithID: (NSManagedObjectContext を使用)。たとえば、アプリケーションで最後に選択されたグループを保存できます。グループ オブジェクトの ID を介してユーザー デフォルトで使用することもできます。オブジェクト ID の URI 表現を使用して、永続ストア間で「弱い」関係を格納することもできます (ハード ジョインが不可能な場合)。

それを URL に変換し、それを文字列またはデータに変換するだけです。

于 2009-02-05T16:37:06.633 に答える
3

URIRepresentationを見ましたか?NSURLをNSStringに変換し、それをNSDataに変換するのは簡単です。

于 2009-02-05T16:28:56.710 に答える
3

アーカイブする前に NSURL を NSString に変換する必要はありません。NSURL をアーカイブするだけです。

編集: オブジェクトの ID は、移行後などに変更される可能性があることを最近知りました。したがって、後でオブジェクトを参照できることを期待して、ID をディスクに保存することはお勧めできません。

于 2009-10-06T23:45:10.263 に答える
0

@preston が言ったように、代わりに objectID をディスクに保存しないでください。

  1. 「id」と呼ばれるエンティティに新しい属性を作成します
  2. エンティティの親エンティティに「myEntitysMaxId」という新しい属性を作成します
  3. エンティティの親実装「addNewMyEntityObject:」をオーバーライドします
  4. そこで、「myEntitysMaxId」を増やし、その値を新しいエンティティ「id」として設定します
  5. 属性に基づいてエンティティをフェッチするときは、通常どおりに実行してください。

はるかにきれいでより良い!

于 2013-04-05T19:08:03.910 に答える