2016-08-31 13 views
1

私はobjectID.URIRepresentationでアクセスしているコアデータオブジェクトを持っています。このオブジェクトをCore Dataに保存した後は、objectIdはnilです。コアデータから新しくupdatedObjectを取得するには、このオブジェクトのuniqueIDがありますが、ライフサイクルのこの時点では存在しません。コアデータobjectIDは保存後にnilです

私は何時間も努力してきました。

ありがとう

答えて

1

新しいエンティティがコアデータコンテキストに挿入されると、それは一時的な識別子を受け取ります。コンテキストが保存されると、永久IDに置き換えられます。あなたはこの前に、オブジェクトIDを取得する必要がある場合は、メソッドを使用してそれを得ることができます。

- (BOOL)obtainPermanentIDsForObjects:(NSArray *)objects 
           error:(NSError **)error 

この方法は、永久的なIDにオブジェクト内の各管理対象オブジェクトのオブジェクトIDを変換します。オブジェクトは永続的なIDを持ちますが、保存されるまではisInsertedに対して積極的に応答します。すでに恒久IDを持っているオブジェクトは無視されます。

更新

永久IDを取得するには、次の実行する必要があります。

// Say you have inserted new managed object you want to get permanent ID of. 
// If you check current objectID after that it will be temporary ID. 
NSManagedObject *obj = [NSEntityDescription insertNewObjectForEntityForName:kSomeEntityName inManagedObjectContext:ctx]; 

// After you have inserted new managed object into the context 
// (or an array of objects) try to obtain permanent Ids. 
if (![ctx obtainPermanentIDsForObjects:@[obj] error:&err]) { 
    // The operation fails. Handle an error. 
    NSLog(@"Could not obtain permanent ID for object %@, error %@ %@", obj, err, err.userInfo); 
    abort(); 
} 

// Now object ID of inserted object is permanent and it will not be 
// changed during save operation. Store permanent ID for future use 
NSManagedObjectID *objID = [obj objectID]; 
+0

おかげ@voromax。しかし2つの質問:1)どのように私は実際にオブジェクトIDを取得するために述べた方法を使用しますか?私は試みましたが、私はそれがちょうどBOOLを返すことを理解できる限り、私はIDを実際に得る方法を知らなかった。 2)あなたは、オブジェクトIDを同じ方法に変換すると、無視され、変更が加えられた場合には保存されないと言っていますか?コアデータの保存後に実際にオブジェクトを取得する方法をまだ理解していない。ありがとうございます – mrcurious

+0

解決策を実装した後の更なる検証のために@voromax – mrcurious

+0

のおかげで、 'objID.isTemporaryID'は依然としてYESを返します。また、テスト用のオブジェクトID以外のものを使用してコアデータからobjを取得した場合、現時点で私が経験している奇妙な動作は経験しません。 – mrcurious

関連する問題