UIManagedDocument不保存到磁盘

时间:2014-03-03 19:14:07

标签: ios objective-c persistence uimanageddocument uidocument

我跟随2013年秋季的斯坦福iOS 7课程,我已经习惯了所有的概念,虽然我遇到了Core Data的UIManagedDocument和持续保存的问题。

我的应用程序与课程类似,所有模型/对象都能正常工作并正确显示。代码与提供的材料没有太大差别;所有的实例化,文件处理,对象上下文和那些东西,以及我确保的一些NSLog调试和手动保存控制,上下文保存所做的所有更改(例如通过UIManagedDocument点火的通知)。

什么不起作用就是保存这些东西。我的意思是,它不会将其保存到文件中,尽管它说它保存了上下文。我认为这与autosaving有关,所以我在UI中创建了一个Button来手动执行此操作。但仍然没有持久的保存。我不知道那是怎么回事。我首先使用App检查了存储,其中包含实际将对象添加到要禁用的文档的部分。然后我继续使用可以显示应用程序存储内容的第三方应用程序。结构在那里,但没有保存的数据。

我遇到了一个网站,有人说这可能与设置对象值时缺少模型中的任何必需值有关。不是这种情况,使用UIManagedDocument的子类handleError:进行了测试。

其他人有这个吗?数据结构相当简单,只有一个权限,包含大约6个字符串和另一种类型的值。我不想在这里发布所有代码,因为它很多。如果您怀疑它是什么,我可以发布部分代码。

在AppDelegate.m中创建文档的代码:

NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *documentsDirectory = [[fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];

NSURL *url = [documentsDirectory URLByAppendingPathComponent:@"AppDocument"];

DebuggingManagedDocument *document = [[DebuggingManagedDocument alloc] initWithFileURL:url];


NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                         [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                         [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
document.persistentStoreOptions = options;


if ( [fileManager fileExistsAtPath:[url path]] ) {
    [document openWithCompletionHandler:^(BOOL success){
        if ( !success ) {
            NSLog(@"Could not open document.. :(");
        } else {
            [self documentIsReady:document];
        }
    }];
} else {
    // Create
    [document saveToURL:url forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success){
        if ( !success ) {
            NSLog(@"Could not save document... :(");
        } else {
            NSLog(@"Saved document!!");
            [self documentIsReady:document];
        }
    }];
}

的代码

此致

1 个答案:

答案 0 :(得分:0)

尝试使用JOURNAL = DELETE模式persistentStoreCoordinator选项而不是默认的WAL模式。