我在開始異步打開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
回來空,因爲循環結束,而文檔在後臺打開。我可以將文檔處理移動到它自己的返回字符串的方法,但我認爲在文檔讀取之前它仍會返回。我想大概不得不提出一個進度指標,並讓用戶等待 - 這可能是好的。