Ios 为什么UIManagedDocument这么慢?

Ios 为什么UIManagedDocument这么慢?,ios,objective-c,core-data,uimanageddocument,Ios,Objective C,Core Data,Uimanageddocument,以下是一段相关代码: NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; url = [url URLByAppendingPathComponent:@"Demo Document"]; UIManagedDocument *document = [[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…

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


如果您已经这样做了,那么您是否已经了解了对于临时保留的文档,还有哪些其他可能的工作?或者是其他东西阻塞了主线程?因为在主线程的事件队列返回之前,该块不会执行。

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

无论如何,
UIManagedDocument
实际上默认情况下会自动将数据保存到文档存储中,并在后台保存,但需要注意的是,它会在任何可能的时候(或者更好的时候,只要它愿意)执行此操作。要知道它是在后台为你做这件事的,这样你就不用担心它了(这是我非常喜欢的一个特性,但也可能会让你感到痛苦)

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

如果是这样的话,那么我认为您应该更多地研究如何让它实际保存您的更改,以便它可以显示在您的控制器中。实际上,它实际上与UIManagedDocument的保存时间关系不大,更多的是与上下文的更新时间有关。如果确实如此,您可能会发现我对同一主题的不同主题/问题的回答很有帮助:

这可能不是你想要的,但我相信它至少会让你走上正确的道路