ios - UIDocument closeWithCompletionHandler : completes immediately

标签 ios objective-c ios6 uidocument

closeWithCompletionHandler" 的文档说:"保存操作结束后,将执行 completionHandler 中的代码。"但是,在我的应用程序中,这段代码:

NSLog(@"closeWithCompletionHandler");
[self.document closeWithCompletionHandler:^(BOOL success) {
    if (success) {
        NSLog(@"completionHandler");
...

立即执行(在 iOS6.1 上):

2013-07-18 19:43:12.673 FooBar[819:907] closeWithCompletionHandler
2013-07-18 19:43:12.675 FooBar[819:907] completionHandler <-- look here
2013-07-18 19:43:16.234 FooBar[819:907] encoded

即使实际将数据写入文件需要几秒钟(我通过跟踪 contentsForType:error: 知道这一点)。

contentsForType:error: 实现如下所示:

- (id)contentsForType:(NSString *)typeName error:(NSError *__autoreleasing *)outError
{
    NSMutableDictionary* wrappers = [NSMutableDictionary dictionary];
    [self encodeObject:self.data toWrappers:wrappers preferredFilename:kDocumentDataPath];
    NSFileWrapper* fileWrapper = [[NSFileWrapper alloc] initDirectoryWithFileWrappers:wrappers];

    NSLog("encoded");

    return fileWrapper;
}

请注意编码在 completionHandler 执行后很长时间内完成:

2013-07-18 19:43:12.675 FooBar[819:907] completionHandler
2013-07-18 19:43:16.234 FooBar[819:907] encoded <-- look here

为什么会这样?我应该如何确保在继续之前将数据写入文件?

最佳答案

我相信你想寻找成功的值(value)是真实的,所以你的代码可能看起来像这样

“我应该如何确保在继续之前将数据写入文件?”

完成处理程序: 保存并关闭操作结束后要执行的代码块。该 block 不返回任何值,只有一个参数: 成功 如果任何保存操作成功则为 YES,否则为 NO。

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIDocument_Class/UIDocument/UIDocument.html#//apple_ref/occ/instm/UIDocument/closeWithCompletionHandler :

回答:

NSLog(@"closeWithCompletionHandler");
[self.document closeWithCompletionHandler:^(BOOL success) {
     if(success){   
         NSLog(@"completionHandler");
     }

“为什么会这样?”

有多种原因,一个可能是因为写入失败并且正在回滚,另一个可能是 iOS 的额外操作系统开销。最后可能是您只是错误地读取了时间长度。

关于ios - UIDocument closeWithCompletionHandler : completes immediately,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17730624/

相关文章:

ios - 在 Swift 中绘制带标题的圆环图

objective-c - 删除 obj-c 中的对象

iphone - 来自字符串数组 iOS 的索引表

ios - Storyboard、Interface Builder 未加载 568h 图像

ios - 如何使用自动布局使 View float 在 ScrollView 上

ios - UIModalPresentationFormSheet 中的 UITextView 卡住应用程序 iOS 10

ios - 视频标签在 iPhone Safari 或 Chrome 和某些 iPad 上不起作用

ios - 将小按钮添加到单元格的右侧,指示下拉列表中的行数

c# - 修剪 NSString 的开始( Objective-C 中的 TrimStart(string) )

facebook - 如何在 iOS 6 中使用社交框架点赞 Facebook 页面/关注 Twitter 用户?