我在开始异步打开UID文件的过程中遇到了困难。我有一系列用户创建的UID文档。当用户按下一个按钮时,我需要打开一些文档,从中拉出一些字符串,并将这些字符串连接成一个新文件。连续打开几个UID文件并等待它们完成
我有一个数组,用于跟踪需要打开哪些文档。我的想法是,我应该遍历数组,打开每个文档,并将其内容附加到NSMutableString
。问题是openWithCompletionHandler
异步执行其工作,所以循环前进并结束,返回一个空字符串,然后打开文档(并再次关闭)。
这里的代码一点点:
__block NSMutableString *combinedString;
for (entryClass *entry in documentList)
{
MyDocumentClass *document = [[MyDocumentClass alloc] initWithFileURL:[entry fileURL]];
if ([document documentState] & UIDocumentStateClosed) {
[document openWithCompletionHandler:^(BOOL success) {
if (success) {
[combinedString appendString:[document documentBody]];
}
[document closeWithCompletionHandler:nil];
}];
}
}
NSLog(@"Combined String: %@", combinedString);
自然发生的事情是combinedString
回来空,因为循环结束,而文档在后台打开。我可以将文档处理移动到它自己的返回字符串的方法,但我认为在文档读取之前它仍会返回。我想大概不得不提出一个进度指标,并让用户等待 - 这可能是好的。