Постоянная миграция магазина на iPhone 5s приводит к сбою таблицы
У меня есть относительно прямое приложение основной детали в Xcode 6.0.1 с iOS Simulator 8.0.
Приложение использует основные данные. Приложение только локальное. Я планирую использовать iCloud или Dropbox для резервного копирования данных, но не для синхронизации. На данный момент это только местный.
Все прекрасно работает за одним огромным исключением. Каждый раз, когда я использую симулятор и симулирую iPhone 5s, как только я переношу магазин, а затем получу доступ к деталям просмотра таблицы, приложение вылетает. Нет информации журнала, нет информации об ошибке, он просто останавливается. То же самое верно для телефона 5s.
Если я запускаю симулятор в режиме iPhone 5 или запускаю приложение на iPhone 4s, оно работает отлично. Я прочитал десятки учебных пособий и статей об основных данных и постоянном хранилище - никогда даже не слышал об этой проблеме.
Таким образом, должна быть некоторая проблема для миграции после сохранения на 64-битных устройствах. Кто-нибудь может помочь?
(void) migrateStore: (NSString *) newSQLFileName {
// переносим текущее хранилище из одного URL в другой // записываем текущий URL хранилища перед миграцией NSURL *storeURL = [self.persistentStoreCoordinator.persistentStores.lastObject URL]; NSLog(@"storeURL перед миграцией:% @", [storeURL description]);
// получить текущее хранилище NSPersistentStore * currentStore = self.persistentStoreCoordinator.persistentStores.lastObject;
// создаем новый URL NSURL * newStoreURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent: newSQLFileName];
// добавляем словарь опций, как только он заработает
// перенос текущего хранилища на новый URL-адрес [self.persistentStoreCoordinator migratePersistentStore:currentStore toURL:newStoreURL параметры: nil withType: NSSQLiteStoreType error: nil];
// проверяем, активно ли новое хранилище, снова записываем URL storeURL = [self.persistentStoreCoordinator.persistentStores.lastObject URL]; NSLog (@ "storeURL после миграции:% @", [storeURL description]);
} // migrateStore: newSQLFileName
из окна журнала отладки:
2014-10-02 16: 35: 09.274 BiopLog [31758: 2509702] Пользователь ввел PIN-код для проверки 2014-10-02 16:35:09.277 BiopLog[31758:2509702] ** Аутентификация пользователя!! 2014-10-02 16:35:09.389 BiopLog[31758:2509702] путь к документу: / Пользователи /john_grauel/ Библиотека / Разработчик /CoreSimulator/ Устройства /25BCE099-41D2-4679-9A40-615656159E84/data/Containers/Data/ Приложение /39A5A3FF-CBDE-42A0-B6BA-DBC632EE0E31/ Документы 2014-10-02 16:35:12.384 BiopLog[31758:2509702] storeURL перед миграцией: файл: /// Пользователи /john_grauel/ Библиотека / Разработчик /CoreSimulator/ Устройства /25BCE099-41D2-4679-9A40-615656159E84/data/Containers/Data/Application/39A5A3FF-CBDE-42A0-B6BA-DBC632EE0E31/Documents/BiopLog.sqlite 2014-10-02 16:35:12.843 BiopLog[31758:2509702] store после миграции: file:///Users/john_grauel/Library/Developer/CoreSimulator/Devices/25BCE099-41D2-4679-9A40-615656159E84/data/Containers/Data/Application/39A5A3FF-CBDE-42A0-B6BA-DBC632EE0E31/Documents/BiopBak201410021635.sqlite (lldb)
и журнал устройств включает в себя:
2 октября, 17:42:41. JohniPhone SpringBoard[48]: Приложение 'UIKitApplication:com.carbonrose.BiopLog[0x9dbb]' аварийно завершено. 2 октября 17:42:41 JohniPhone assertiond[58]: сбой pid_suspend для: неизвестная ошибка: -1, неизвестная ошибка: -1 окт 2 17:42:41 JohniPhone assertiond[58]: не удалось установить приоритет 2, приоритет: Нет такого процесса 2 октября 17:42:41 JohniPhone утверждал [58]: Не удалось установить приоритет 4096, приоритет: Нет такого процесса 2 октября 17:42:41 JohniPhone UserEventAgent[17]: id=com.carbonrose.BiopLog pid=886, состояние =0 2 октября, 17:42:41 Местоположение JohniPhone [55]: значок местоположения теперь должен быть в состоянии "Активен", 2 октября 17:42:41 geod JohniPhone [127]: Не удается получить идентификатор пакета для процесс 565 окт. 2 17:42:43 JohniPhone locationd[55]: Жест EnabledForTopCLient: 1, EnabledInDaemonSettings: 0 окт. 2 17:42:43 Ядро JohniPhone [0]: xpcproxy[888] Контейнер: /private/var/mobile/Containers/ Данные / Приложение /EC6B60D8-510D-4E46-82B1-29891D0F4E79 (песочница) 2 октября 17:42:43 yweather JohniPhone [888]: ошибка проверки: 12A405: libxpc.dylib + 71820 [4BC9CA3D-4DEE-314C-ADBFE-53B-53B-53B ]: 0x7d 2 окт. 17:42:43 Неизвестный JohniPhone [888 ]: 2 октября 17:42:43 JohniPhone yweather[888]: сбой CFURLSetResourcePropertyForKey, поскольку ему был передан этот URL-адрес без схемы: /var/mobile/Containers/Data/Application/EC6B60D8-510D-4E46-82B1-29891D0F4E79/Documents/YI13N/sqlite/yi13nevents.db 2 октября 17:42:43 JohniPhone yweather[888]: включение Crittercism v4.3.4...
1 ответ
Я создал файл sqlite с образцами данных и загрузил этот файл при инициализации приложения. Разница в хранении чисел с 32-битных на 64-битные машины была причиной сбоя процесса. Решение состоит в том, чтобы считывать данные из кода и при необходимости перенести основное хранилище данных на другое устройство. процесс миграции создаст правильное количество мест хранения.