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