NSFetchedResultsController: изменение предиката, не работающего?

Я пишу приложение с двумя таблицами на одном экране. Стол, из-за которого встают, является списком папок, и правильная таблица показывает список файлов. При ответвлении на строке слева правильная таблица покажет файлы, принадлежащие той папке.

Я использую Базовые Данные для устройства хранения данных. Когда выбор изменений папки, предикат выборки NSFetchedResultsController правильной таблицы изменит и выполнит новую выборку, затем перезагрузит данные таблицы. Я использовал следующий фрагмент кода:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"list = %@",self.list];
[fetchedResultsController.fetchRequest setPredicate:predicate];
NSError *error = nil;
if (![[self fetchedResultsController] performFetch:&error]) {   
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}
[table reloadData];

Однако результатами выборки является все еще то же. У меня есть "предикат" NSLog'ed прежде и после выборки, и они были корректны с обновленной информацией. Результаты выборки остаются такими же как начальная выборка (когда представление загружается).

Я не очень знаком с путем объекты выборок Данных Ядра (там кэширующаяся система?), но я сделал подобные вещи прежде (изменяющиеся предикаты, перевыбирающие данные и обновляющая таблица) с единственными табличными представлениями, и все подходило.

Если бы кто-то мог, дал мне подсказку, я очень ценился бы.

Заранее спасибо.

35
задан Peter Hosey 24 March 2010 в 14:20
поделиться

1 ответ

У меня была почти такая же проблема, пока я не нашел подсказку в недавнем сообщении в блоге на iphone incubator

NSFetchedResultsController кэширует первые результаты. (Вероятно, у вас что-то установлено в initWithFetchRequest: managedObjectContext: sectionNameKeyPath: cacheName)

Я предполагаю, что ваш код (как и мой) является производным от образца CoreData, поэтому, предполагая, что это @ "Root", прежде чем вы измените предикат, do a

[NSFetchedResultsController deleteCacheWithName:@"Root"];  
56
ответ дан 27 November 2019 в 07:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: