我无法理解 UIDocuments 异步打开的方式。我有一系列用户创建的 UIDocument。当用户按下按钮时,我需要打开一些文档,从中提取一些字符串,然后将这些字符串连接到一个新文件中。
我有一个数组来跟踪需要打开哪些文档。我的想法是我应该遍历数组,打开每个文档,并将其内容附加到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
因为在后台打开文档时循环结束了。我可以将文档处理移至其自己的返回字符串的方法,但我认为这仍会在读取文档之前返回。我大概必须设置一个进度指示器并让用户等待——这可能没关系。