前几天我正在测试它,它正在运行。今天,在调用此方法之后,它从不调用完成块。
是否存在未调用完成块的情况?我记得苹果公司表示无论发生什么事情都会随时调用它。
这是代码块:
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”),我没有看到它被记录。
答案 0 :(得分:1)
我遇到了同样的问题(这就是我发现你的问题的方法)。
原因很简单。测试代码不是在等待调用完成处理程序,当然也不是它完成执行。
如果测试足够长或碰巧停止,您的测试有时可能会起作用。但这不可靠。
使用此处提供和解释的WAIT宏并解决问题。