У меня есть табличное представление, которое управляется NSFetchedResultsController.Однако у меня возникла проблема с операцией поиска или создания.Когда пользователь достигает нижней части моего табличного представления, я запрашиваю у моего сервера другую порцию контента.Если он не существует в локальном кэше, мы создаем его и храним.Однако, если он существует, я хочу добавить эти данные в контроллер полученных результатов и отобразить их.Я не могу понять эту часть.
Вот что я делаю до сих пор:
- NSFetchedRequestController при инициализации запросов для последних 100 результатов из базы данных (используя
setFetchLimit:
).Даже если есть 1000 строк, я хочу, чтобы сначала было доступно только 100. - Передача возвращенного массива значений с моего сервера в NSOperation для обработки.
- В операции создайте новый контекст управляемого объекта для работы.
- В операции я выполняю итерацию по массиву и выполняю запрос на выборку, чтобы проверить, существует ли объект (основываясь на егоid сервера).
- Если объект не существует, мы создаем его и вставляем в контекст управляемого объекта операций.
- После завершения итерации мы сохраняем контекст управляемого объекта,который вызывает уведомление о слиянии в моем основном потоке.
Во время слияния вновь созданные объекты из шага 4 вставляются в таблицу, но любой объект, который уже существовал и был только что выбран, - нет.Вот соответствующий код из моей NSOperation
for (NSDictionary *resultsDict in self.results)
{
NSNumber *dbID = [NSNumber numberWithLong:[[resultsDict valueForKey:@"id"] longValue]];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:kResultEntityName inManagedObjectContext:moc]];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat: @"(dbID == %@)", dbID]];
NSError *error = nil;
NSManagedObject *newObject = nil;
// Query the data store to see if the object exists
newObject = [[moc executeFetchRequest:fetchRequest error:&error] lastObject];
[fetchRequest release];
// If it doesn't exist, create it.
if ((tweet == nil))
{
// Create the NSManagedObject and insert it into the MOC.
}
}
То, что я хочу передать моему основному потоку, - это вновь созданные объекты плюс любые существующие объекты, которые могли быть извлечены в запросе на выборку при каждой итерации цикла.
Я чувствую, что мне чего-то не хватает, и я могу использовать толчок в правильном направлении.