[Swift] Realm.io 资料库介绍 - 其之二:Migrations 迁移

[前言]
上一篇介绍完了基本的结构设计,也讲了基本的CRUD。
但是,开发设计中,资料库的结构是会变动的。
有时可能甚至于发生结构上的失策而需要改动型态之类的。
问题是,如果你单纯只是去改结构,那么在你下一次执行时,势必会发生编译错误。
因为Realm会自动去判断你的资料结构是不是符合当前的状态。
那么一但你改动了结构,是否就必须有较大的设定改变呢?
其实,这一点,Realm真的都帮我们处理好了。

[设置]
(这边的设置法则和官方的不太一样,因为我觉得这样比较好管理)
基本上,你只需要开个档案(我档名都叫RealmMigration.swift)
然后在其中写入迁移设定就好了。这份设定档的code基本上就是固定的。
所以其实照抄贴上就行了:

import Foundationimport RealmSwiftclass RealmMigration {            func didApplicationLunch () {        self.migrationVersion()    }        func migrationVersion() {                        let config = Realm.Configuration(                        schemaVersion : 1 ,                        migrationBlock : { migration , oldSchemaVersion in                //                if (oldSchemaVersion < 1) {//                    如果你有必须针对旧板本迁移到新板本的资料改变,就写在这里。//                    详细的做法可以参考官方的範例//                }                            }                    )                Realm.Configuration.defaultConfiguration = config            }    }let realm = try! Realm() //不要理会这一行是不是会报黄色警告给你,写在这完完全全就是让realm这个变数变成全域使用。你就不用每一次都下这一行。

不过光是这样设置是没用的,因为这个class还没有在app开启时被执行。
如果你没有预设在app执行时先跑这个class,那么你改了结构就一样会报error给你。

修改:AppDelegate.swift
在class AppDelegate中追加下面这行

let realmMigration:RealmMigration = RealmMigration()

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {    return true}

改成

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {    self.realmMigration.didApplicationLunch()    return true}

这时再执行编译的话,之后迁移就会发生作用了。

至于改了结构要如何迁移?很简单!
你只要去改版本号就好了。
例如现在的版本号是:

schemaVersion : 1 ,

你改了结构后,就把版本号加1就好了:

schemaVersion : 2 ,

在下一次的编译中,他就会自动帮你迁移结构了。
但你改了结果却没有改版本号的话,就会发生错误。

--
[目次]
[Swift] Realm.io 资料库介绍 - 其之一:初探CRUD
[Swift] Realm.io 资料库介绍 - 其之二:Migrations 迁移
[Swift] Realm.io 资料库介绍 - 其之三:查询、排序、键结、自动更新、笔数


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章