Автоматическая миграция основных данных не работает

Близкие,

Мне нужна помощь по миграции основных данных, и вот описание ситуации.

  1. У меня есть приложение для iOS, которое использует основные данные для офлайн-поддержки.
  2. Текущая версия приложения в магазине - 1.1, а текущая версия базовой модели данных в магазине приложений - 11 (Model11.xcdatamodel).
  3. Сейчас я выпускаю новую версию (1.1.1) в магазин приложений, и в ней произошли серьезные работы. Также одна из сущностей получила новый атрибут, добавленный в основные данные.
  4. Перед внесением изменений в файл модели я добавил новый файл модели (Model12.xcdatamodel), сохранив Model11.xcdatamodel в качестве основы.
  5. Сделал Model12.xcdatamodel как текущую версию.
  6. Добавлен новый атрибут в одну из сущностей для поддержки функции, внесены изменения в режим и т. Д.
  7. После этого я сделал Model11.xcdatamodel, тип которого был «версией базовой модели данных» из окна утилиты Xcode (справа).
  8. Установил 1.1v из магазина приложений, вошел в систему и, кроме того, создал приложение 1.1.1v в режиме выпуска и установил.

Но приложение начинает сбой и сообщает, что URL-адрес магазина пуст, вот журнал с устройства.

Jan 19 13:04:50 iPod MyApp[15856] <Error>: Magical Record Stack: Current Default Core Data Stack: ---- 
    Model:           {
        BroadcastMessage = <6fa959c6 514f4c53 e53e7fd7 28585c56 6d4da4ad ba56c2c4 d92bef6e debadfd4>;
        Data = <92870bec c4a8794e 293dcbe9 93282d69 cb675039 cb9b9bf6 8dda6359 34697663>;
        Event = <de060947 8ec9f2bb 80e341eb 787e7eec 7cc2a09f 356e511c 7d515ca5 130690fe>;
        InvitedFriend = <1e041915 6931f26e fd325666 299adf13 5fa2a735 b16b5faf cc0c7de1 1792c97f>;
        MAnswer = <5c06b689 b0497f14 65e550d0 1bd30779 08056f42 a6361f71 4e0eb2e5 67127d66>;
        MQuestion = <96d6e2a6 b96f1371 2c52e719 ca6a0cbd 7957e63a 4a6ccbe8 049e8818 f9ec5d2d>;
        MUser = <af239067 1b3fb3d9 d63b6536 e0e411a8 6ff5f02e db5d7c01 968a4835 4f361610>;
        NotificationSettings = <75be9f25 cfb5f63e 9f717160 9b389386 8fb9d7e2 093648ac beff79dd b0c8181b>;
        RecentContact = <0eaf2696 94c73a4e 9155b3aa c98bf623 51165db6 c1a1472c 2178c3d0 654c0dac>;
    }
    Coordinator:     <NSPersistentStoreCoordinator: 0x15e883a0>
    Store:           (null)
    Default Context: <NSManagedObjectContext (0x15e96c70): *** DEFAULT ***> on *** MAIN THREAD ***
    Context Chain:   

    - DEFAULT (0x15e96c70) (*)
    - BACKGROUND SAVING (ROOT) (0x15e99000) 
Jan 19 13:04:50 SB-iPod Medusa[15856] <Error>: Store2 URL after creation (null)

URL-адрес магазина принимает значение NULL. Я не уверен, почему это происходит.

Я получаю действительный URL-адрес, если работаю в режиме отладки и отмечу, что использую Magical Records для основных данных.

Я следил за тем, что упоминается в этой ссылке https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdUsingMOM.html Но это не работает

Могут ли некоторые сказать мне, почему эта миграция не выполняется и как я могу это исправить?


person Naveen    schedule 19.01.2015    source источник
comment
Шаг 7 должен быть шагом 4. Шаг 4 не нужен, так как вы создали две разные модели, которые не могут быть перенесены.   -  person thom_ek    schedule 19.01.2015
comment
Как я могу это исправить сейчас?   -  person Naveen    schedule 19.01.2015
comment
@thom_ek: Как я могу исправить эту проблему?   -  person Naveen    schedule 19.01.2015
comment
Я не заметил, что вы используете MagicalRecords (поэтому я удалил свой ответ). Итак, пожалуйста, дайте некоторый код инициализации MR / CoreData.   -  person thom_ek    schedule 19.01.2015
comment
- (недействительно) setupCoredataStack {NSURL * storeURL2 = [NSPersistentStore MR_urlForStoreName: kSQLLiteStoreName2]; // NSLog (@ store2 URL% @, storeURL2); if ([[NSFileManager defaultManager] fileExistsAtPath: [путь storeURL2]]) {[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed: kSQLLiteStoreName2]; DDLogWarn (@Magical Record Stack:% @, [MagicalRecord currentStack]); DDLogWarn (URL @ Store2 после создания% @, [NSPersistentStore MR_defaultPersistentStore] .URL); возвращение; }}   -  person Naveen    schedule 19.01.2015
comment
Я думаю, что вы указываете URL-адрес с названием второй модели. Все модели имеют одно имя модели, например Model.momd вместо Model11, Model12 и т. Д. Вы можете увидеть это глобальное имя в Xcode в дереве исходного кода.   -  person thom_ek    schedule 19.01.2015
comment
URL: file: ///var/mobile/Applications/FE2F1C9F-CA6F-49EE-BD17-E838D015F816/Library/Application%20Support/MyApp/MyAppDataStore2.sqlite)   -  person Naveen    schedule 19.01.2015
comment
Хм ... Я думаю, вам стоит попробовать настроить свой основной стек данных вручную, чтобы понять, как он работает. MagicalRecords кажется слишком волшебным :)   -  person thom_ek    schedule 19.01.2015
comment
Похоже, MR не может найти ваш файл sqlite. Во-первых, вы должны включить журнал MR, а во-вторых, вы должны пошаговая отладка в [MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:]. Стандартные функции CoreData возвращают ошибки, которые дадут вам точную причину, по которой хранилище не открывается. Вероятно, повышение MR logging скажет вам то же самое. Если вы начинаете программировать, лучше избегать использования таких инструментов, как MR - они хороши, если вы уже знаете, как правильно настроить CoreData.   -  person thom_ek    schedule 20.01.2015
comment
Я сделал, он указал, что файл исходной модели отсутствует, я не уверен, почему он отображается.   -  person Naveen    schedule 20.01.2015
comment
Позвольте нам продолжить это обсуждение в чате.   -  person thom_ek    schedule 20.01.2015


Ответы (1)


В конце концов, я решил использовать ручную миграцию, а не автоматическую / легкую миграцию. Это решило проблему

Пожалуйста, проверьте эту ссылку, которая очень полезна https://github.com/magicalpanda/MagicalRecord/issues/466

person Naveen    schedule 22.01.2015