2012-11-16 5 views
0

최근에 개체를 추가 할 때 영구 ID를 만들 때 특정 정보가 없기 때문에 간단한 추측이 될 수 있습니다.NSManagedObject에 임시 ID가 필요한 이유

좋아요.

그럼 이것을 읽어 obtainPermanentIDsForObjects 오류 :

영구 ID에 변환을 주어진 어레이 내의 오브젝트의 오브젝트 ID. - (BOOL) obtainPermanentIDsForObjects :이 방법은 영구적으로 객체 ID의 각 관리 오브젝트의 오브젝트 ID 변환 (NSError *) 오류

(NSArray를 )는 오류 개체. 객체는 영구 ID를 갖지만 저장 될 때까지 isInserted 에 여전히 긍정적으로 응답합니다.. 이미 영구 ID가있는 오브젝트는 무시됩니다.

코어 데이터가 저장 조작 중 할당에 사용하는 것과 동일한 규칙 (엔티티를 지원하는 첫 번째 쓰기 가능한 저장소이며 인스턴스 및 관련 항목에 적합)과 동일한 규칙에 따라 상점에 아직 지정되지 않은 오브젝트가 지정됩니다. 특별 고려 사항

좋아, NSManagedObject를 저장할 때까지 임시 ID를 얻었습니다. 그러나

managedObjectContext를 저장하면 NSManagedObjects의 ID가 업데이트되지 않습니다.

PO([Catalogs convertEachElementToAnother:(id)^(id element) { 
    BGCatalogData * data = (BGCatalogData*) element; 
    NSManagedObjectID * theObjectID= data.objectID; 
    return theObjectID; 
}]); 

NSError * error; 
BOOL saveSuccesfully = [[BGMDCRManagedObjectContextThreadHandler managedObjectContext] save:&error]; 
PO([Catalogs convertEachElementToAnother:(id)^(id element){ 
    BGCatalogData * data = (BGCatalogData*) element; 
    NSManagedObjectID * theObjectID= data.objectID; 
    return theObjectID; 
}]);' 

주 모드로 :이 코드와 같이이 동일하게 유지

[Catalogs convertEachElementToAnother:(id)^(id element){ BGCatalogData * data = (BGCatalogData*) element; NSManagedObjectID * theObjectID= data.objectID; return theObjectID; }]: (
    "0x888a340 <x-coredata:///BGCatalogData/t084E0F43-A129-4023-8190-2962D8D0930A603>", 
    "0x888d670 <x-coredata:///BGCatalogData/t084E0F43-A129-4023-8190-2962D8D0930A609>", 
    "0x888ed50 <x-coredata:///BGCatalogData/t084E0F43-A129-4023-8190-2962D8D0930A615>", 
    "0x888f690 <x-coredata:///BGCatalogData/t084E0F43-A129-4023-8190-2962D8D0930A621>" 
) 
2012-11-16 15:33:28.489 BadgerNew[26871:1d03] [Catalogs convertEachElementToAnother:(id)^(id element){ BGCatalogData * data = (BGCatalogData*) element; NSManagedObjectID * theObjectID= data.objectID; return theObjectID; }]: (
    "0x888a340 <x-coredata:///BGCatalogData/t084E0F43-A129-4023-8190-2962D8D0930A603>", 
    "0x888d670 <x-coredata:///BGCatalogData/t084E0F43-A129-4023-8190-2962D8D0930A609>", 
    "0x888ed50 <x-coredata:///BGCatalogData/t084E0F43-A129-4023-8190-2962D8D0930A615>", 
    "0x888f690 <x-coredata:///BGCatalogData/t084E0F43-A129-4023-8190-2962D8D0930A621>" 
) 

우리는 객체에게 영구적 인 ID를 제공 할 수 있습니다 : 나는 위의 결과 코드

로 변환 할 수 없습니다 obtainPermanentIDsForObjects를 호출하여 BEFORE 개체가 저장됩니다.

왜 IOS가 영구적 인 ID를 제공하기 위해 저축하기까지 기다리는 것이 귀찮았습니까? 왜 지금 안 되니?

답변

0

입니다. 왜냐하면 CoreData는 다른 영구 객체의 '차단'(예 : 카운터 증가)하기 위해 기본 Persistant Store를 조작해야하기 때문입니다. 불필요하고 천천히 할 일을 저장하기 전에 영구 ID가 필요하지 않은 경우 (임시로만 아이템을 사용하고 절대로 저장할 수 없습니다)

+0

충분히 좋습니다. 데이터를 저장하면 내 managedObject의 ID가 변경되지 않는 이유는 아직도 이해할 수 없습니다. –

+0

이유를 알았습니다. 부모에게 데이터를 저장 한 후에도 부모에게 데이터를 저장해야합니다. –

관련 문제