Realm Migration doesn't work

后端 未结 8 1149
天涯浪人
天涯浪人 2020-12-28 17:16
    let config = Realm.Configuration(
        // Set the new schema version. This must be greater than the previously used
        // version (if you\'ve never set a         


        
相关标签:
8条回答
  • 2020-12-28 17:41

    I had a similar issue happening where my app would crash despite the fact that I added the default migration code in didFinishLaunchingWithOptions

    The problem was that I was indeed initializing an instance of Realm in my first view controller as a class level property. So removing that class level realm object from my first ViewController fixed the issue.

    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
      }
    }
    

    I instead created the object inside the function that needed it, which is a better approach anyway.

    0 讨论(0)
  • 2020-12-28 17:45

    As long as you're in local development only, I'd recommend to reset your Realm database instead of doing a migration. Migrations are the way to go, if you have already shipped a version of your app with another schema and want to keep user data.

    You can delete the database by deleting the app from the simulator or the device. Alternatively you can use NSFileManager to delete the Realm file before accessing the database.

    let defaultPath = Realm.Configuration.defaultConfiguration.path!
    try NSFileManager.defaultManager().removeItemAtPath(defaultPath)
    
    0 讨论(0)
  • 2020-12-28 17:46

    I find best solution:

    You need add Realm migration code before didFinishLaunchingWithOptions in willFinishLaunchingWithOptions

    func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
    
        RealmManager.shared.configureRealm()
    
        return true
    }
    
    0 讨论(0)
  • 2020-12-28 17:49

    Make sure you don't try to instantiate instance of Realm() before migration config is set in application(application:didFinishLaunchingWithOptions:). When it crashes check execution stack to find which instance raised exception. I had the same error, in my case Realm instance in one of my view controllers were instantiated before migration block was set.

    Good luck

    0 讨论(0)
  • 2020-12-28 17:50

    I also had this issue happening where my app would crash despite the fact that I added the default migration code in didFinishLaunchingWithOptions

    As already stated here, the problem was that I was initializing an instance of Realm in my first view controller as a class level property.

    BUT I couldn't just remove this instance and put it in the viewDidLoad, as I needed to use it in several functions.

    The solution was actually to add the 'lazy' keyword, so the migration can be done before the initialization, as I found over here: https://www.selmanalpdundar.com/solution-of-realm-migration-error-code-10.html

    import UIKit
    import RealmSwift
    
    class ViewController: UIViewController {
        lazy var realm = try! Realm() //added lazy and changed let to var
    }
    
    0 讨论(0)
  • 2020-12-28 17:53

    I often get the same fatal error too. This usually happens when you make changes to Realm Objects with a "Primary Keys". The quickest and most easy fix is to simply delete the app from the device or simulator - then run your project again.

    0 讨论(0)
提交回复
热议问题