2013-07-29 141 views
1

下面是相关的代码片断:为什么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 ...

回答

0

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

如果您已经完成了这项工作,您是否考虑过可以使用暂时保留的文档还有哪些工作?或者是其他东西阻塞主线程?因为该块在主线程的事件队列回来之前不会执行。

0

相信与否,这是正常的。这与你的代码无关,但当你使用autosave时,或多或少会如何工作。这种自动保存行为实际上是默认启用/启用的(您也可以关闭它 - 但我强烈建议不要那样做,除非您需要并知道您在做什么)。

不管怎么说,UIManagedDocument实际上自动默认情况下并在后台毫不逊色保存您的数据文档商店为你 - 但需要注意的情况是,它会做它时,它可以(或更好,就随时至 )。意识到它在背景中为你做了这个,这样你就不必担心它(它是我真正喜欢它的一个特性 - 但也可能是他的屁股)。

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

如果是这样,那么我认为您应该更多地关注如何让它实际保存更改,以便它可以显示在您的控制器中。实际上,当UIManagedDocument保存时,它确实没什么用处,并且更多地关于何时更新上下文。如果确实如此,您可能会发现我对不同线索/问题的回答对此相同主题有帮助:Multiple UIManagedDocument For Read & Write

这可能是也可能不是您想要的,但我相信它会帮助您至少是正确的道路。