2013-11-24 1 views
0

현재 테스트 케이스 용으로 데이터 모델을로드하고 저장하려고 시도하지만 나중에 관심이있을 수도 있습니다.코어 데이터 모델을 프로그래밍 방식으로로드/저장하는 방법은 무엇입니까?

코어 데이터 모델을 만들 수 있습니다. 오브젝트를 생성 할 수 있습니다. 저장 방법도 찾아 냈고 (올바른 방법입니까?)로드 할 프로그램을 만듭니다. 그렇다면 등록 된 객체 수는 0입니다. 아무도 이해합니까?

//not part of the snippet here is the setup of some objects, etc. 
//mdoc is the NSPersistentDocument instance (to be precise KKDocument instance which 
//extends NSPersistentDocument) 

XCTAssertTrue([[mdoc.managedObjectContext registeredObjects] count] == 5); 

//save the document, note that kkFileType is the UTI-string for my model which is conform to public.xml 
NSError * error; 
NSURL *modelURL = [NSURL fileURLWithPath:@"testData.vith" isDirectory:FALSE]; 
NSLog(@"save url %@",modelURL.absoluteString); 
[mdoc saveToURL:modelURL ofType:kkFileType forSaveOperation:NSSaveOperation completionHandler:^(NSError *errorOrNil){ 
     NSLog(@"error saving %@",errorOrNil); 
}]; 

//load data into second document 
KKDocument *second = [[KKDocument alloc] init]; 
XCTAssertTrue([second readFromURL:modelURL ofType:kkFileType error:&error],@"error: %@",error); 

//check that structure is provided 
XCTAssertTrue(second.managedObjectContext != nil,"managedObjectContext missing"); 
XCTAssertTrue([second.managedObjectContext registeredObjects] != nil,"no registered Objects?"); 

//this test fails with message "instead 0" 
XCTAssertTrue([[second.managedObjectContext registeredObjects] count] == 5, "instead %d", [[second.managedObjectContext registeredObjects] count]); 

마지막 테스트가 실패하고 마지막 테스트 만 실패합니다. 중간에 생성 된 XML 파일도 잘 보입니다.

  1. 먼저 개체를 가져와야합니까? 아니면 다른 무엇이 잘못 되었습니까?
  2. 그리고 올바른 방법을 사용하여 핵심 데이터 모델을 저장하고 XML 파일과로드하는 방법을 사용합니까? 대신 NSPersistentStoreCoordinator을 처리해야합니까?

미리 감사드립니다.

답변

1

registeredObjects은 컨텍스트가 "인식하는"개체의 수를 "저장소의 개체 수"와 다른 것으로보고합니다. 상점에있는 모든 오브젝트의 수를 원하면 해당 상점을 조회해야합니다. (예 : 가져 오기 수행 등)

일반적으로 상점 유형에 관계없이 객체를 유지하거나 (로드 또는 저장하는 경우) NSPersistentStoreCoordinator을 사용해야 할 필요가 있습니다 . 메모리 내 상점이라도 NSPersistentStoreCoordinator이 필요합니다.

귀하의 특별한 경우에는 NSPersistentDocumentNSPersistentStoreCoordinator을 처리 할 것으로 예상됩니다. 제 생각에 당신의 주요 문제는 registeredObjects의 의미에 대한 오해라고 생각합니다.

+0

당신이 옳았습니다. 먼저 객체를 가져와야했습니다. – Klaus

관련 문제