Я работаю с Core Data целую вечность. В настоящее время я хотел бы узнать больше о UIManagedDocument. Я сделал несколько примеров проектов, чтобы узнать больше об этом. Наконец-то я могу перенести этот механизм в реальные проекты. В существующем проекте я в настоящее время реализую основные данные, поэтому я создал модель данных (с тем же именем, что и приложение). Я создал класс для сущности, затем создал категорию с простым методом добавления объектов в базу данных. Наконец я создал синглтон для UIManagedDocument, сейчас он выглядит так:
+ (MDManagedDocument *)sharedDocument {
static dispatch_once_t dispatchOncePredicate;
__strong static MDManagedDocument *md = nil;
dispatch_once(&dispatchOncePredicate, ^{
md = [[MDManagedDocument alloc] init];
});
return md;
}
- (id)init {
self = [super init];
if(self) {
[self setManagedDocument:[[UIManagedDocument alloc] initWithFileURL:[[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject] URLByAppendingPathComponent:@"ThisIsDatabase"]]];
[[self managedDocument] setPersistentStoreOptions:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]];
}
return self;
}
- (void)prepareManagedDocument {
if (![[NSFileManager defaultManager] fileExistsAtPath:[[[self managedDocument] fileURL] path]]) {
[[self managedDocument] saveToURL:[[self managedDocument] fileURL] forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) {
if (success) {
NSLog(@"Managed document was created.");
} else {
NSLog(@"Error occured while creating managed document.");
}
}];
} else if([[self managedDocument] documentState] == UIDocumentStateClosed) {
[[self managedDocument] openWithCompletionHandler:^(BOOL success) {
if (success) {
NSLog(@"Managed document was opened.");
} else {
NSLog(@"Error occured while opening managed document.");
}
}];
} else if([[self managedDocument] documentState] == UIDocumentStateNormal) {
NSLog(@"Managed document is opened and prepared for editing and/or reading.");
}
}
После того, как я создаю общий экземпляр и вызываю метод prepareManagedDocument, он вылетает с этим сообщением:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString _cfurl]: unrecognized selector sent to instance 0xb3774b0'
Интересно то, что он падает только при первом запуске, но из-за этого сбоя он не создает постоянное хранилище, поэтому не сможет писать в документ и т. д. У меня есть проект, который работает с этим кодом. , и не выдавать никаких исключений, поэтому он создает постоянное хранилище, и я могу писать в этот документ.
В чем я ошибаюсь?
Заранее спасибо!