CoreData: неправильное число объектов в разделе - PullRequest
1 голос
/ 12 декабря 2010

Я использую CoreData в приложении для iOS, чтобы сохранить простой список объектов местоположения (имя, координаты).Я дважды сталкивался с ситуацией, после предупреждения памяти, когда записи CoreData кажутся поврежденными.

В частности (в tableView: numberOfRowsInSection:)

NSUInteger numObjects = [[[fetchedResultsController sections] objectAtIndex:section] numberOfObjects];

возвращает 4для раздела == 0.

Затем (в tableView: cellForRowAtIndexPath:)

aLocation = [fetchedResultsController objectAtIndexPath:indexPath];

для indexPath [0,3] генерируется исключение:

NSRangeException: * - [_ PFArray objectAtIndex:]: index (3) за пределами (3)

т.е. CoreData говорит, что в таблице 4 строки, но затем не может вернуть объект для последней строкикогда табличное представление запрашивает это.

Два вопроса:

1) Любые мысли о том, как это может возникнуть и как предотвратить это

2) Как только это произошло,Есть ли способ исправить проблему данных в коде?

Спасибо

Стивен

Ответы [ 3 ]

2 голосов
/ 11 октября 2011

Похоже, проблема заключалась в некоторой несогласованности в кеше CoreData, которая и вызывала это - неясно, что вызывает его, поскольку предикаты никогда не меняются. Я закончил тем, что вызвал deleteCacheWithName, если когда-либо возникает исключение при доступе к последнему объекту в fetchedResultsController. Похоже, что это решило проблему (никаких проблем от пользователей за 6 месяцев).

0 голосов
/ 20 февраля 2013

У меня тоже была такая же проблема.У меня не было времени, чтобы полностью исследовать, но я каждый раз настраивал FetchController на разные начальные и управляемые объектыObjectContext

Установка cacheName на nil решила проблему для меня.Не было большой проблемы с отсутствием кэша, так как объем данных был небольшим.

0 голосов
/ 12 декабря 2010

возможно, вам нужно повторить выборку после предупреждения памяти [fetchedResultsController performFetch] (только предположение)

...