Разве не смешно, что вы иногда находите решение сразу после публикации вопроса ?!Ключ, скорее всего, заключался в том, чтобы не использовать цикл for для обработки, а поместить функцию обработки в отдельный метод и многократно вызывать ее, передавая массив объектов для обработки.Делая это, вы можете вызвать функцию, используя [self performSelector:withObject:afterDelay:]
.Даже если вы укажете значение нуля для задержки, это вызовет вызов метода в следующем цикле выполнения.Это означает, что вы можете обновить пользовательский интерфейс, обработать следующий элемент и повторять этот процесс до тех пор, пока массив элементов не станет пустым.Вот мое законченное решение.Если кто-нибудь знает лучший способ, я все еще хотел бы услышать это, но сейчас это по крайней мере работает!
Правка - я упаковал это решение в отдельный класс, чтобы им было легче управлять,и положи его на мой Github.Может быть, это поможет кому-то еще:)
Edit 2 - сделал класс обработки более гибким, заставив его запускать циклы вместо итераций по массивам.Конечно, вы можете использовать его для самостоятельной итерации массива в соответствии с примером в файле readme.Но если вы не работаете с массивом, вы можете просто запустить цикл runCount
раз и сделать все, что вам нужно сделать в processingBlock
.
https://github.com/mashers/BackgroundLoopProcessor