2016-07-04 66 views
9

我只是测试一些使用Realm的配置,因此我添加并删除了领域类中的变量和列表。由于我只是在测试,我不想通过迁移过程 - 我也没有任何影响连续性的数据。如何避免RealmSwift中的迁移

有没有什么办法可以解决由Realm自动请求的迁移?

回答

19

无论是否更改模式,有两种方法可以跳过迁移错误。

  1. 使用deleteRealmIfMigrationNeeded财产。如果是true,如果需要迁移,则使用提供的模式重新创建Realm文件。

    let config = Realm.Configuration(deleteRealmIfMigrationNeeded: true) 
    Realm.Configuration.defaultConfiguration = config 
    
    let realm = try! Realm() 
    ... 
    

  2. 递增架构版本每次启动。 Realm具有自动迁移功能。如果您不需要迁移现有数据,则只需增加模式版本即可。架构将被Realm自动更改。

    let config = Realm.Configuration(schemaVersion: try! schemaVersionAtURL(Realm.Configuration.defaultConfiguration.fileURL!) + 1) 
    Realm.Configuration.defaultConfiguration = config 
    
    let realm = try! Realm() 
    ... 
    
+0

伟大的东西。我让realm = try! Realm()在viewDidLoad之前定义。在应用程序崩溃之前,我可以在哪里将您的建议代码进行工作,因为它遇到了领域定义? – kangarooChris

+0

我们建议将代码放在AppDelegate的'didFinishLaunchingWithOptions'中。如果你把'let realm = try! Realm()'作为ViewController的成员变量,在'didFinishLaunchingWithOptions'之前调用。所以它应该是'lazy var realm = try! Realm()' –

+0

我测试了两种解决方案,并且都在工作。万分感谢。 – kangarooChris

8

在夫特3

迁移领域可容易地通过将该代码内侧AppDelegate类 “didFinishLaunchingWithOptions” 方法避免。

var config = Realm.Configuration() 
config.deleteRealmIfMigrationNeeded = true 
Realm.Configuration.defaultConfiguration = config 

这如果迁移需要有新的安装程序将删除境界数据库。

+0

对我来说就像一个魅力!谢谢! – mourodrigo

+0

但是你会失去数据? – Eenvincible

+0

是的,它会删除领域存储并添加一个新的。 –

0

斯威夫特4

var config = Realm.Configuration() 
config.deleteRealmIfMigrationNeeded = true 
Realm.Configuration.defaultConfiguration = config