setFetchLimit и sectionNameKeyPath на iPhone OS4 (XCode 3.2.3) вызывают сбой - PullRequest
2 голосов
/ 25 июня 2010

Раньше в iPhone OS 3.2 с XCode 3.2.2 это работало нормально.

Я создал небольшой тест, чтобы доказать это.NSManagedObject с 2 атрибутами: «группа» и «vaue».Обе строки.

При настройке NSFetchedResultsController для использования в TableViewController я установил setFetchLimit в запросе и установил sectionNameKeyPath в "group", так как я хочу, чтобы результирующие сущности были сгруппированы в секции.

Прежнее поведение (ранее iPhone OS 4 и XCode 3.2.3) возвращало результирующий набор объектов, содержащий максимальное количество объектов, указанных в ограничении.

С новой ОС и XCode«разделы» и numberOfObjects FecthedResultsController в каждом разделе возвращают ВСЕ значения, которые находятся в постоянном хранилище, игнорируя установленный предел.

Но когда методы делегата пытаются получить доступ к данным, их там нет, и этогенерирует [_PFBatchFaultingArray objectAtIndex:]: index (X) за пределами (X) ', будучи X установленным мною пределом и вызывая сбой приложения.

Мне кажется, что есть ошибка вSDK при использовании лимитов и разделов вместе, который был представлен с 3.2.3 / OS 4.

Пример проблемы:

наличие в хранилище данных группы «A», содержащей «3» элементов, группы «B», содержащей «2» элементов, и группы«C» содержит «2» элементов (общее количество элементов 7), а ограничение равно 7, все разделы будут возвращены.Если установлен предел менее 7, приложение будет аварийно завершать работу.

Кто-нибудь еще испытывает эту проблему?

Ответы [ 2 ]

1 голос
/ 19 августа 2010

Вылетал с одной секции.Решение является гибридом предложения Мэтта и ответа Дэвида;Я установил для cacheName значение nil:

- (id)initWithFetchRequest:managedObjectContext:sectionNameKeyPath:**strong text**cacheName:**strong text**
1 голос
/ 30 июня 2010

Я испытывал что-то неопределенно похожее после обновления.

Я обнаружил, что добавление вызова для удаления кэша, похоже, решило мою проблему.

[NSFetchedResultsController deleteCacheWithName:@"myCacheName];

Надеюсь, это поможет, Matt

...