1

前几天我正在用它进行测试,它正在工作。今天,调用此方法后,它从不调用完成块。

是否存在不调用完成块的情况?我记得 Apple 说过,无论发生什么,它都会被调用。

这是代码块:

dispatch_async (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
            // Get ubiquitous url
            NSURL *ubiq = [[NSFileManager defaultManager]
                           URLForUbiquityContainerIdentifier:nil];
            NSURL *ubiquitousPackage = [[ubiq URLByAppendingPathComponent:
                                         @"Documents"] URLByAppendingPathComponent:fileName];

            // Create new CloudFile
            CloudFile *file = [[CloudFile alloc]initWithFileURL:ubiquitousPackage];
            file.data = data;
            [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onDocumentStateChanged:) name:UIDocumentStateChangedNotification object:file];             

            dispatch_async (dispatch_get_main_queue (), ^(void) {
                [file saveToURL:file.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:^(BOOL success) {
                    NSLog(@"test");
                    if (success) {
                        [self sendEvent:ICLOUD_FILE_SAVE_SUCCESSFUL object:file];
                    } else {
                        [self sendEvent:ICLOUD_FILE_SAVE_FAILED];
                        NSLog(@"kaiCloud: Saving failed. (%@)",fileName);
                    }

                }];
            });

        });

编辑:请注意,我添加了 NSLog(@"test") 并且我没有看到它被记录。

4

1 回答 1

1

我遇到了同样的问题(这就是我发现你的问题的方式)。

原因很简单。测试代码不会等待调用完成处理程序,当然也不会等待它完成执行。

如果测试时间足够长或碰巧停止,您的测试有时可能会起作用。但这并不可靠。

使用此处提供和解释的 WAIT 宏并解决问题。

https://github.com/hfossli/AGAsyncTestHelper

于 2013-09-21T11:43:09.660 回答