在我的 NSPersistentDocument 子类中,我需要在保存文档时将一些元数据保存到我的文档中,当然,当我打开文档时再读回来。我确实让它工作了,但我不确定这是否是处理它的正确方法。(我的测试反映了一个新的、未保存的文档被保存然后再次打开。新的、未保存的文档直到第一次保存后才分配 NSPersistentStore。)
这是我的工作代码,其中包含与我的测试和如何处理此问题的思考过程相关的注释:
- (BOOL)readFromURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError
{
// No persistent store available yet
BOOL result = [super readFromURL:absoluteURL ofType:typeName error:outError];
// Persistent store available, but metadata may be already altered by configurePersistentStoreCoordinatorForURL:
// if I were set the data there instead of in writeToURL:
if (result == YES)
{
// Read metadata
NSPersistentStore *persistentStore = [self.managedObjectContext.persistentStoreCoordinator persistentStoreForURL:absoluteURL];
NSString * uuid = [persistentStore metadata][DefaultLocationUUIDKey];
self.defaultLocationUUID = uuid;
}
return result;
}
- (BOOL)writeToURL:(NSURL *)absoluteURL ofType:(NSString …Run Code Online (Sandbox Code Playgroud) 我现在遇到过两次这个问题:Xcode 4.1,Lion和NSPersistentDocument Core Data项目.
我的程序运行正常,直到我向模型中的一个实体添加了两个"二进制数据"属性.现在,当我运行应用程序并尝试保存文档时,会从内部抛出异常configurePersistentStoreCoordinatorForURL:ofType:modelConfiguration:storeOptions:error:.
上次我开始收到此错误时,就是我更新了项目目标设置中的设置.那时,重置更改的设置没有任何效果,我不得不从备份恢复Xcode项目文件,然后它工作 - 所以它不是代码相关的.
这是抛出异常时的日志:
2011-08-27 17:34:00.867 MyAppName[5690:707] Unsupported store type.
2011-08-27 17:34:00.879 MyAppName[5690:707] (
0 CoreFoundation 0x00007fff8ae0e986 __exceptionPreprocess + 198
1 libobjc.A.dylib 0x00007fff8e28cd5e objc_exception_throw + 43
2 CoreData 0x00007fff9576776a -[NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error:] + 1530
3 AppKit 0x00007fff9190af88 -[NSPersistentDocument configurePersistentStoreCoordinatorForURL:ofType:modelConfiguration:storeOptions:error:] + 554
4 MyAppName 0x0000000100001af4 -[MyAppNameDocument configurePersistentStoreCoordinatorForURL:ofType:modelConfiguration:storeOptions:error:] + 244
5 AppKit 0x00007fff91bc6697 -[NSPersistentDocument(NSDeprecatedInternal) _configurePersistentStoreCoordinatorForURL:ofType:error:] + 172
6 AppKit 0x00007fff91909a82 -[NSPersistentDocument writeToURL:ofType:forSaveOperation:originalContentsURL:error:] + 418
7 MyAppName 0x0000000100001c51 -[MyAppNameDocument writeToURL:ofType:forSaveOperation:originalContentsURL:error:] + 161
8 AppKit 0x00007fff917c5062 -[NSDocument _writeSafelyToURL:ofType:forSaveOperation:forceTemporaryDirectory:error:] …Run Code Online (Sandbox Code Playgroud)