2011-01-28 3 views
2

У меня есть приложение, которое использует coredata. Загрузка данных происходит в классе A. Обновления/сохранение/удаление Coredata находятся в SharedDelegate (B). Делегат инициирует загрузку в A и реализует свой протокол для получения уведомления о завершении загрузки, поэтому делегат может обновлять свои данные в базе данных.Согласованное обновление UITableview после обновлений Coredata

Теперь, после этого, я хотел бы, чтобы класс C, имеющий UITableview, обновлял свои строки и ячейки, чтобы я мог показывать новый контент.

Как бы я правильно указал C, что он может обновить свою таблицу? Каковы возможные ошибки, которые могут возникнуть?

Загрузка и обновление происходит асинхронно, конечно, и до сих пор я обновляюсь только после завершения всех загрузок. Я хотел бы разделить задачу, так сказать.

Любые подсказки?

ответ

6

два варианта:

  1. использовать NSFetchedResultsController в качестве источника данных табличного представления. В документации для NSFetchedResultsController содержится много кода, который вы можете скопировать & в ваше приложение, чтобы управлять обновлением табличного представления всякий раз, когда изменяется контекст управляемого объекта.

  2. Зарегистрировать для NSManagedObjectContextObjectsDidChangeNotification. В методе уведомления обработайте случаи NSInsertedObjectsKey, NSUpdatedObjectsKey и NSDeletedObjectsKey и соответствующим образом обновите представление таблицы.

+0

Звучит многообещающе, попробуем оба. Спасибо за быстрые ответы! – Icky

1

NSNotificationCenter. Установите класс C для прослушивания уведомлений и соответствующим образом загрузите данные. Когда SharedDelegate B обновляет данные, отправьте уведомление.

Смежные вопросы