我尝试加载并保存我的数据模型,目前仅用于测试用例,但这也可能会引起人们的兴趣。
我可以创建一个核心数据模型,我可以创建对象等。我甚至找到了一种保存的方法(这是正确的方法???)并且我让程序加载它。但那么registeredObject计数是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文件看起来也很好。
NSPersistentStoreCoordinator
吗?非常感谢提前!
答案 0 :(得分:1)
registeredObjects
将报告上下文“知道”的对象数量,这与“商店中的对象数量”不同。如果您想要计算商店中的所有对象,则需要查询该商店。 (即执行取指等)
一般情况下,是的,如果你想持久化对象(也就是加载或保存它们),你将需要使用NSPersistentStoreCoordinator
,而不管商店类型如何。即使是内存商店也需要NSPersistentStoreCoordinator
。
在您的特定情况下,我希望NSPersistentDocument
可以为您处理NSPersistentStoreCoordinator
。我认为你的主要问题是对registeredObjects
的含义的误解。