запретить CoreData возвращать кэшированные результаты - PullRequest
2 голосов
/ 05 июля 2011

Я запрашиваю Client NSManagedObject через Core Data в моем приложении и отображаю результат в виде простых подробностей UIView, помещенных в мой стек UINavigationsController - ничего сложного или необычного.

Когда я возвращаюсь со страницы подробностей для этого объекта Client, я также проверяю наличие обновлений для моих клиентов в фоновом режиме, и если они есть, я тихо обновляю свое хранилище данных в фоновом потоке на другом управляемомконтекст объекта.Это работает, и я вижу, что изменения в данных появляются в моем Базовом хранилище данных через мой браузер баз данных SQLite, поэтому я знаю, что данные были обновлены.

Проблема в том, что когда я вернусь к тому же клиенту, я не увижу изменения, пока я полностью не закрою свое приложение или не выберу другой клиент, а затем вернусь к тому, который, как я знаю, имеет изменения.Похоже, что последний запрос на выборку объекта Client кэшируется моим контекстом управляемого объекта.

Как предотвратить это?

Ответы [ 2 ]

2 голосов
/ 05 июля 2011

Вам необходимо зарегистрироваться на NSManagedObjectContextDidSaveNotification, передавая фон NSManagedObjectContext в качестве объекта, а затем вызвать mergeChangesFromContextDidSaveNotification:, когда уведомление сработает на вашем NSManagedObjectContext в главном потоке. Это указано в Руководство по программированию базовых данных: параллелизм с базовыми данными . И не забудьте обновить данные в вашем представлении (если это вызов табличного представления reloadData)

0 голосов
/ 05 июля 2011

Это может быть слишком простым решением, но вы перезагружаете свои данные в viewWillAppear: ?

- (void)viewWillAppear
{
    [self.tableview reloadData];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...