NSFetchedResultsController аварийно завершает работу в iOS 6, если указано аффективное хранилище

Я вижу проблему, аналогичную описанной здесь: http://fingertwister.tumblr.com/post/32341639626/coredata-problem-with-multiple-stores-using

т.е. два хранилища, одно статическое, другое созданное пользователем. Настройте NSFetchedResultsController для выборки только из одного из хранилищ. Когда контроллер освобождается, приложение аварийно завершает работу с EXC_BAD_ACCESS в экземпляре NSArray. Код отлично работал в iOS 4 и 5; сбой происходит только в iOS 6.

Анализ зомби показывает, что освобожденный NSArray, о котором сообщается, является свойством «affectedStores» NSFetchRequest NSFetchedResultsController. Как и в приведенной выше ссылке, если я удалю команду [fetchRequest setAffectedStores:...], проблема исчезнет. И, опять же, как и в связанном примере, я не вижу ничего плохого в своем собственном коде в том, что касается управления памятью этого массива.

Документы, похоже, ничего не говорят об изменениях в iOS 6 в этой области. Я что-то пропустил?


person jfewtr    schedule 18.01.2013    source источник


Ответы (1)


Эта проблема возникает из-за того, что где-то в CoreData что-то идет не так с управлением памятью, что приводит к преждевременному освобождению затронутого массива Stores.

Вы можете обойти это, увеличив счетчик ссылок в качестве хака: https://gist.github.com/maruno/5451607

person Maruno    schedule 24.04.2013
comment
где-то в CoreData что-то пошло не так? Пожалуйста, дайте ответ на этот вопрос. Дать ссылку недостаточно, пожалуйста, опишите ответ в этом посте. - person Walery Strauch; 24.04.2013
comment
Я принимаю это как ответ, поскольку это достойный обходной путь того, что кажется ошибкой Apple. Спасибо за фрагмент кода. - person jfewtr; 26.04.2013