保存UIManagedDocument - 提高速度

时间:2013-05-09 22:02:49

标签: core-data icloud uimanageddocument

我有以下代码,只要设置了属性“document”(类型为UIManagedDocument),我就会在View Controller上使用该代码。

我不确定其他人是否这样做,但我发现Core Data中的并发概念非常混乱,文档有解释它但仍然很难掌握。出于这个原因,我想知道人们是否有任何想法如何加速我用来保存新设置UIDocument的代码(如果它不存在)。如果其他人想使用它,这段代码确实有用。

我的主要目标是尽量节省文档保存和加载所需的时间。目前这需要大约20秒钟,这太长了!

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];

if (![[NSFileManager defaultManager] fileExistsAtPath:self.documentDatabase.fileURL.path]) {
    [self.documentDatabase saveToURL:self.documentDatabase.fileURL
                    forSaveOperation:UIDocumentSaveForCreating
                   completionHandler:^(BOOL success) {
                       [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];

                       if (success) {
                           NSLog(@"Saved %@", self.documentDatabase.localizedName);

                           dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                               [self.documentDatabase.managedObjectContext performBlockAndWait:^{
                                   dispatch_async(dispatch_get_main_queue(), ^{
                                       [Book newBookWithTitle:self.documentDatabase.fileURL.lastPathComponent.stringByDeletingPathExtension inManagedObjectContext:self.documentDatabase.managedObjectContext];

                                       [self saveDocumentWithCompletionHandler:^(bool success) {
                                           if (success) {
                                               [self setIsDocumentHidden:NO];
                                           }
                                       }];

                                       NSLog(@"Added default note to %@", self.documentDatabase.fileURL.lastPathComponent);
                                   });
                               }];
                           });
                       } else {
                           NSLog(@"Error saving %@", self.documentDatabase.fileURL.lastPathComponent);
                       }
                   }];
} else {
    [self openDocumentWithCompletionHandler:nil];
}

1 个答案:

答案 0 :(得分:0)

除非你正在处理庞大的数据库,否则20秒听起来有点极端。您是否尝试过时间分析仪器中的保存过程?

即使延迟完全在框架代码中,有时通过深入了解时间配置文件,您可以获得一些暗示它正在做的事情,这需要花费很长时间。例如,它只是切线相关,但通过这样做我发现保存在iCloud上同步的UIManagedDocuments在数据模型中存在反向关系时完全被破坏了性能。