Миграция области не работает

let config = Realm.Configuration( // Set the new schema version. This must be greater than the previously used // version (if you've never set a schema version before, the version is 0). schemaVersion: 1, // Set the block which will be called automatically when opening a Realm with // a schema version lower than the one set above migrationBlock: { migration, oldSchemaVersion in // We haven't migrated anything yet, so oldSchemaVersion == 0 if (oldSchemaVersion < 1) { // Nothing to do! // Realm will automatically detect new properties and removed properties // And will update the schema on disk automatically } }) // Tell Realm to use this new configuration object for the default Realm Realm.Configuration.defaultConfiguration = config // Now that we've told Realm how to handle the schema change, opening the file // will automatically perform the migration let realm = try! Realm() 

Это было добавлено в приложение (приложение: didFinishLaunchingWithOptions 🙂

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

 fatal error: 'try!' expression unexpectedly raised an error: Error Domain=io.realm Code=0 "Migration is required due to the following errors: - Property types for 'unit' property do not match. Old type 'string', new type 'int' - Property 'reps' has been added to latest object model." UserInfo={NSLocalizedDescription=Migration is required due to the following errors: - Property types for 'unit' property do not match. Old type 'string', new type 'int' - Property 'reps' has been added to latest object model.}: file /Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-700.1.101.15/src/swift/stdlib/public/core/ 

Есть идеи?

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

Вы можете удалить базу данных, удалив приложение из симулятора или устройства. Кроме того, вы можете использовать NSFileManager для удаления файла Realm перед доступом к базе данных.

 let defaultPath = Realm.Configuration.defaultConfiguration.path! try NSFileManager.defaultManager().removeItemAtPath(defaultPath) 

У меня была аналогичная проблема, когда мое приложение didFinishLaunchingWithOptions несмотря на то, что я добавил код миграции по умолчанию в didFinishLaunchingWithOptions

Проблема заключалась в том, что я действительно инициализировал экземпляр Realm в моем первом контроллере представления как свойство уровня класса. Поэтому удаление этого объекта класса уровня класса из моего первого ViewController устранило проблему.

 import UIKit import RealmSwift class ViewController: UIViewController{ let db = try! Realm() // Removing this solved my issue func doSomething(){ let db = try! Realm() // Placed this here instead } } 

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

Убедитесь, что вы не пытаетесь создать экземпляр Realm () перед настройкой миграции в application(application:didFinishLaunchingWithOptions:) . Когда он сбой проверяет выполнение стека, чтобы найти, какой экземпляр вызвал исключение. У меня была такая же ошибка, в моем случае экземпляр Realm в одном из моих контроллеров представлений был создан до того, как был установлен блок миграции.

Удачи

Я часто получаю такую ​​же фатальную ошибку. Обычно это происходит, когда вы вносите изменения в объекты Realm с помощью «Первичных ключей». Самое быстрое и простое решение – просто удалить приложение с устройства или симулятора, а затем снова запустить проект.

Вы уверены, что правильно обновили свою схему? Если вы установили schemaVersion: 1 перед внесением изменений, вам необходимо изменить его на 2 чтобы миграция была вызвана.

  • Двоичный оператор '|' не может применяться к двум операндам UIViewAutoresizing
  • Расширение протокола Swift для получения уведомления обозревателя уведомлений
  • Swift 2.0 Невозможно вызвать «карту» с помощью списка типов argumet (, (_) -> _)
  • Как получить номер телефона входящего звонка в iOS Swift?
  • Swift - «sharedApplication недоступен». Вместо этого используйте решения на основе контроллера взглядов
  • Swift 2 / Xcode 7 beta - несколько битмаксов вызывают ошибку
  • Переопределить метод init UIView в swift
  • Анимация панели навигации barTintColor изменение в iOS10 не работает
  • как проверить, существуют ли URL-адреса rtmp или hls, или они дадут 404 ошибку в быстром
  • Push-уведомление, когда приложение завершено
  • Как настроить еженедельное локальное уведомление в быстром
  • Interesting Posts

    Как интегрировать покупку InApp и собственный SDK для iOS с Haxe

    Пользовательские кнопки в XIB, используемые как пользовательский UITableViewCell, не реагируют на краны (ios7)

    Хотите, чтобы стрелять IBAction при касании внутри статического TableViewCells

    Не удалось установить SwiftyJSON

    UIActivityIndicator в ячейке UICollectionView случайным образом не скрывает

    Оффлайн и онлайн-события, не получающие Вызов в кордове 3.5.0

    локализация прошедшего времени

    Поиск в Twitter для hashtag

    Цель C: UIDatePicker UIControlEventValueChanged только активируется при втором выборе

    не может сочетаться с предыдущим спецификатором объявления типа «имя-типа»

    UITableViewCell очень медленно реагирует на выбор

    Вызов popToRootViewControllerAnimated после отклоненияModalViewControllerAnimated

    Приложение попыталось нажать на контроллер представления nil

    Можно ли добавить одно устройство iOS на две разные аккаунты разработчиков Apple?

    Отклонение и представление MFMessageComposeViewController

    Давайте будем гением компьютера.