为什么UIManagedDocument这么慢?

时间:2013-07-29 06:42:35

标签: ios objective-c core-data uimanageddocument

以下是相关代码的片段:

NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
    url = [url URLByAppendingPathComponent:@"Demo Document"];
    UIManagedDocument *document = [[UIManagedDocument alloc] initWithFileURL:url];    
if (document.documentState == UIDocumentStateClosed) {
            NSLog(@"file is closed");
            NSLog(@"%@",[url path]);
            NSDate *start = [NSDate date];
            [document openWithCompletionHandler:^(BOOL success) {
                if (success) {
                    NSLog(@"finished OPEN");
                    NSDate *methodFinish = [NSDate date];
                    NSTimeInterval executionTime = [methodFinish timeIntervalSinceDate:start];
                    NSLog(@"time = %f",executionTime);
                    self.managedObjectContext = document.managedObjectContext;
                }
            }];
        }

“文件已关闭”和“已完成打开”之间的时间间隔为16.6秒。这是正常的行为吗?编码不好?还是因为我在模拟器上运行?

我不知道它是否重要,但文件只有50KB ......

2 个答案:

答案 0 :(得分:0)

这不是正常行为。您是否尝试在“Debug-> iCloud->删除iCloud内容”下使用Xcode 5清除所有iCloud数据?完全实现它需要几分钟,但从一个干净的石板开始可能会有所帮助。

如果您已经完成了这项工作,那么您是否看过其他可能正在使用该文档暂时保留它的内容?或者是阻止主线程的其他东西?因为在主线程的事件队列回来之前该块才会执行。

答案 1 :(得分:0)

信不信由你,这很正常。它与您的代码无关,但与您使用autosave时或多或少的工作方式有关。这种自动保护行为实际上是默认打开/启用的(你也可以关闭它 - 但我强烈建议不要这样做,除非你需要知道你正在做什么)。

无论如何,UIManagedDocument实际上默认情况下会自动将您的数据保存到文档存储中,而且背景不会少 - 但需要注意的是,它会在任何时候执行此操作可以(或更好,无论什么时候)。意识到它在后台为你做到这一点,所以你不必担心它(它是我真正喜欢它的一个特征 - 但也可能是他的痛苦)。

听起来您需要保存它,因为它没有显示您的数据,或者您没有看到您期望的结果。

如果是这种情况,那么我认为您应该更多地考虑如何让它实际保存您的更改,以便它可以显示在您的控制器中。实际上,它实际上与UIManagedDocument保存时几乎没有关系,更多的是关于何时更新上下文。如果确实如此,您可能会发现我对同一主题的不同主题/问题的答案很有帮助:Multiple UIManagedDocument For Read & Write

这可能是也可能不是你所追求的,但我相信它至少会让你走上正确的道路。