Какой предпочтительный подход для постоянного обмена данными между потоками при использовании Core Data? Я загружаю большой файл и хочу показать ход загрузки в UIProgressBar
. Фактическая загрузка происходит в фоновом потоке, созданном NSOperation
.
Информация о загрузке (локальный путь, общее количество байтов, полученных байтов) моделируется как управляемый объект Core Data, а фактический файл хранится в каталоге Documents /. Мне пришло в голову одно решение - создать отдельный контекст управляемого объекта в фоновом потоке, передать ему objectID
и вытащить его с помощью метода objectWithID:
. Всякий раз, когда фоновый поток выполняет сохранение, основной поток получает уведомление, а основной контекст объединяет эти изменения, и представление таблицы впоследствии обновляется.
Этот подход работает, но сохранение не может быть выполнено слишком часто, или пользовательский интерфейс зависает. Таким образом, пользовательский интерфейс обновляется после получения каждого X KB данных, где значение X должно составлять не менее 500 КБ, чтобы пользовательский интерфейс был несколько отзывчивым. Есть ли лучший способ передачи данных о ходе загрузки в основной поток по мере их поступления?
РЕДАКТИРОВАТЬ: будет ли использование KVO какой-либо помощи? Если да, знаете ли вы какие-нибудь хорошие учебники по теме?