Вы можете посмотреть NSOperationQueue
, страница документации здесь .
Также есть два существующих вопроса переполнения стека, в которых используются NSOperationQueue
, которые здесь и здесь . Оба приняли ответы.
Что касается выяснения того, завершена ли запись в файл, у меня также была эта проблема, когда я писал приложение для OS X, которое создало очень большой файл. Я хотел, чтобы пользователь мог отслеживать ход записи. В итоге я использовал NSTimer
вместе с UIProgressBar
По сути, вы захотите определить (ожидаемый) общий размер файла. Затем, когда вы пишете файл, у вас должен быть другой метод (в приведенном ниже коде у меня есть checkFileWritingProgress
), который вы можете вызывать через определенные промежутки времени, используя NSTimer
. Сравните текущий прогресс с общим ожидаемым размером файла и соответственно обновите UIProgressBar
.
Я предоставил некоторый код для начала работы.
- (void)checkFileWritingProgress:(NSTimer *)someTimer {
fileAttributes = [fileManager attributesOfItemAtPath:[NSString stringWithFormat:@"%@.data",saveLocation] error:nil];
currentFileSize = [fileAttributes fileSize]; // instance variable
if(currentFileSize < maxFileSize) { // maxFileSize is instance variable
[progressBar setDoubleValue:(((double)currentFileSize/(double)maxFileSize)*100)];
// progressWindows OS X only... not on iOS
//[progressWindow setTitle:[NSString stringWithFormat:@"Writing... | %.0f%%",(((double)currentFileSize/(double)maxFileSize)*100)]];
}
else {
[progressBar setDoubleValue:100.0];
}
}
И таймер ...
NSTimer *timer = [[NSTimer scheduledTimerWithTimeInterval:0.01
target:self
selector:@selector(checkFileWritingProgress:)
userInfo:nil
repeats:YES] retain];
//(linked to timer... this is the
// CORRECT way to use a determinate progress bar)
[progressBar setIndeterminate:NO];
[progressBar setDoubleValue:0.0];
[progressBar displayIfNeeded];
Надеюсь, этот код поможет. Дайте мне знать, если что-то нужно уточнить.