У меня возникли проблемы с открытием асинхронно UIDocuments. У меня есть серия UIDocuments, созданная пользователем. Когда пользователь нажимает кнопку, мне нужно открыть некоторые документы, вытащить из них некоторые строки и объединить строки в новый файл.Открытие нескольких 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
возвращается пустым, так как заканчивается цикл в то время как документы открываются в фоновом режиме. Я мог бы переместить обработку документа в собственный метод, который возвращает строку, но я думаю, что это все равно будет возвращено до того, как документ будет считан. По-видимому, мне придется поставить индикатор прогресса и заставить пользователя подождать - наверное, все в порядке.