Сбой приложения без постоянных хранилищ после обновления iOS7

У меня есть приложение, которое аварийно завершает работу с сообщением «NSPersistentStoreCoordinator не имеет постоянных хранилищ». Он не может выполнить операцию сохранения. после того, как пользователь обновится с iOS6 до iOS7. Единственное решение для этого — удалить приложение, потому что постоянное хранилище испорчено (очевидно).

Я действительно не хочу, чтобы пользователям приходилось удалять приложение, а затем переустанавливать его и терять все свои сохраненные данные. Есть ли исправление, которое поможет решить эту проблему?


person JMD    schedule 07.01.2014    source источник
comment
Что вы изменили в своем последнем обновлении в отношении CoreData?   -  person coneybeare    schedule 08.01.2014
comment
Я предполагаю, что вы используете основные данные. Вы изменили имя своей БД? Добавлены поля в вашу модель данных? Вы смотрели основные документы Apple по переносу данных? developer.apple.com/library/ios/ документация/какао/концептуальные/   -  person Michael    schedule 08.01.2014
comment
Я не понимаю вопроса... последнее обновление coredata на самом деле не проблема. его обновление с iOS6 до iOS7   -  person JMD    schedule 08.01.2014
comment
Хранится ли ваше постоянное хранилище в месте, для которого создаются резервные копии обновлений iOS?   -  person coneybeare    schedule 08.01.2014
comment
он хранится в каталоге библиотеки приложения   -  person JMD    schedule 08.01.2014
comment
Вы тестировали с использованием основных данных с параметром sqlite, установленным в JOURNAL = DELETE, это тот же режим, который использовался в iOS7. Вы должны иметь возможность воспроизвести проблему с помощью симулятора, скопировав файл sqlite из симулятора iOS6 в симулятор iOS7. Однако, если вы используете iCloud, вы не сможете этого сделать. Режим WAL никогда не работал у меня, он зависал по разным сценариям, поэтому теперь я всегда использую режим журнала.   -  person Duncan Groenewald    schedule 08.01.2014
comment
Я посмотрю на этого Дункана.   -  person JMD    schedule 08.01.2014


Ответы (2)


Может быть режим журналирования по умолчанию (WAL) связан с потерей данных. CoreData включает WAL по умолчанию, начиная с iOS 7. См. Данные и iOS 7: другое поведение постоянного хранилища

person Ben Affleck    schedule 07.01.2014
comment
этот постоянный сбой магазина связан с проблемами потери данных? они не кажутся одинаковыми. - person JMD; 08.01.2014
comment
@JMD, вы упомянули, что у вас было обновление iOS 6 -> 7, поэтому я предположил, что что-то может пойти не так, потому что значения по умолчанию CoreData изменились в iOS 7. Я не совсем уверен, что произойдет, если вы откроете не-WAL sqlite db в режиме WAL. - person Ben Affleck; 08.01.2014
comment
@Andy Теоретически вы можете открыть sqlite-файл, отличный от WAL, в режиме WAL, но при использовании режима WAL было зарегистрировано довольно много проблем, многие из которых исчезли, если используется журнальная модель. - person Duncan Groenewald; 08.01.2014
comment
@DuncanGroenewald хорошо, если приложение должно работать в обеих iOS, хуже, если sqlite нужно синхронизировать между устройствами через iCloud, я бы придерживался и применял один и тот же режим везде, чтобы избежать коллизий. В данном случае старый режим журналирования. - person Ben Affleck; 08.01.2014
comment
@ Энди, да, я обнаружил, что старый режим работает нормально, поэтому всегда используйте его сейчас. Для настольного приложения MAC режим WAL создает три файла, что не является хорошим UX, поэтому до тех пор, пока NSPersistentDocument не использует пакет для предоставления оболочки (или я не создам свою собственную оболочку пакета), мне придется придерживаться режима журнала. - person Duncan Groenewald; 08.01.2014

Что такое крах? Отображение журнала сбоев поможет.

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

Если вы можете создать состояние сбоя во время работы с Xcode, где он сработает?

Что такое кодовая точка?

Это в -addPersistentStore...? Если да, то какая ошибка возвращается.

Обновить

Чтобы было ясно, если вы получаете эту общую ошибку при сохранении, это означает, что вы игнорируете ошибку при вызове -addPersistentStore. Проверьте эту ошибку и выясните, в чем заключается настоящая проблема.

person Marcus S. Zarra    schedule 07.01.2014
comment
Сбой происходит при первой попытке сохранить контекст управляемого объекта. - person JMD; 08.01.2014
comment
Что за крах?!? Какая строка кода. Без этих деталей вы не получите ответа, вы получите предположение. - person Marcus S. Zarra; 08.01.2014