0

UIManagedDocument只要设置了属性“文档”(类型),我就有以下代码在我的视图控制器上使用。

我不确定其他人是否这样做,但我发现 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];
}
4

1 回答 1

0

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

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

于 2013-05-18T09:31:27.440 回答