2013-11-24 2 views
0

Я пытаюсь загрузить и сохранить мою модель данных, в настоящее время только для тестовых случаев, но это может быть интересно и позже.Как загрузить/сохранить базовую модель данных программным путем?

Я могу создать базовую модель данных, я могу создавать объекты и т. Д. Я даже нашел способ сохранить (это правильный путь?), И я заставляю программу загружать его. Но тогда зарегистрированное значение Object равно 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]); 

Тестовый пример красиво выполнен, только последний тест не с отсчетом 0. XML-файл, созданный между хорошо выглядит слишком.

  1. Нужно ли сначала извлекать объекты? Или что еще пошло не так?
  2. И еще я использую правильный подход для сохранения и загрузки базовой модели данных в и из файла XML и из него? Нужно ли мне иметь дело с NSPersistentStoreCoordinator?

Большое спасибо заранее!

ответ

1

registeredObjects будет сообщать количество объектов, которые «осведомлены» о контексте, что-то отличное от «количества объектов в магазине». Если вы хотите подсчитать все объекты в магазине, вам нужно будет запросить этот магазин. (т. е. выполнить выборку и т. д.)

В общем, да, вам понадобится использовать NSPersistentStoreCoordinator, если вы хотите сохранить объекты (то есть загружать или сохранять их), независимо от типа хранилища , Даже в магазинах памяти требуется NSPersistentStoreCoordinator.

В вашем конкретном случае я ожидал бы, что NSPersistentDocument будет обрабатывать NSPersistentStoreCoordinator. Я думаю, что ваша главная проблема здесь заключается в непонимании значения registeredObjects.

+0

Вы были правы. Сначала мне нужно было найти объекты. – Klaus

Смежные вопросы