UIManagedDocument 不保存到磁盘

Posted

技术标签:

【中文标题】UIManagedDocument 不保存到磁盘【英文标题】:UIManagedDocument does not save to disk 【发布时间】:2014-03-03 19:14:06 【问题描述】:

我参加了 2013 年秋季的斯坦福 ios 7 课程,我已经习惯了所有的概念,但我遇到了 Core Data 的 UIManagedDocument 和持久保存的问题。

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

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

我遇到了一个网站,有人说这可能与设置对象值时缺少模型中的任何必需值有关。不是这样,用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】:

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

【讨论】:

以上是关于UIManagedDocument 不保存到磁盘的主要内容,如果未能解决你的问题,请参考以下文章

UIManagedDocument - 验证核心数据实体

如何使用块为我的整个应用程序共享的每个磁盘上的文档创建一个全局 UIManagedDocument 实例?

在 UIManagedDocument 中禁用自动保存

自动保存不适用于 UIManagedDocument 上的 NSUndoManager

获取 UIManagedDocument 的 URL

UIManagedDocument 和 NSFetchedResultsController