如何在一个应用程序中迁移多个领域文件

我在一个应用程序中有两个领域文件,当我想迁移它们时出错。 我希望在Xcode中运行时自动更新域,而不会每次都更改schemaVersion

class News: Object {
    @objc dynamic var name: String  
}

class NewsManager {
    static var realm = try! Realm()
    static var cacheRealm: Realm = {

        let documentDirectory = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask,
                                                         appropriateFor: nil, create: false)
        let url = documentDirectory.appendingPathComponent("cache.realm")
        var config = Realm.Configuration()
        config.fileURL = url
        return try! Realm(configuration: config)
    }()
}

当我将新的属性添加到News时,例如@objc dynamic var title:String ,我在AppDelegate的func应用程序(_ application:UIApplication,didFinishLaunchingWithOptions launchOptions:[UIApplicationLaunchOptionsKey:Any]?= nil)中添加以下代码- > Bool

let config = Realm.Configuration(schemaVersion: 1, migrationBlock: { migration, oldSchemaVersion in

    })
Realm.Configuration.defaultConfiguration = config

返回时崩溃的消息尝试! NewsManager中的 领域(配置:配置)

Fatal error: 'try!' expression unexpectedly raised an error: Error Domain=io.realm Code=10 "Migration is required due to the following errors:
- Property 'News.test' has been added." UserInfo={Error Code=10, NSLocalizedDescription=Migration is required due to the following errors:
- Property 'News.test' has been added.}: file /BuildRoot/Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-900.0.69.2/src/swift/stdlib/public/core/ErrorType.swift, line 181

我该怎么办?

领域:3.0.1

斯威夫特:4.0

iOS:10


领域按预期工作。 某些类型的模型更改Realm可以自动迁移,其他类型需要您提供手动迁移。 你的例子中的一个就是其中之一。

由于您添加了一个新的非可选属性String ,因此Realm需要遍历所有现有模型并找出要放入该属性的内容。 如果该属性是String?类型的String? ,使用nil作为默认值是有意义的,Realm可以自动执行迁移。 但是,由于类型是String并且没有明显的默认默认值,因此Realm要求您为每个模型对象的新属性手动指定一个值。

解决这个“问题”的正确方法是增加模式编号,并提供一个迁移模块,当您以需要迁移的方式更改模型时,该迁移模块将实际指定新属性的新值。

请查阅我们有关迁移的文档以获取更多详细信息。


看看https://realm.io/docs/swift/latest/#migrations。 领域网站非常适合理解在项目中如何正确使用Realm

链接地址: http://www.djcxy.com/p/34879.html

上一篇: How to migrate multiple realm files in one App

下一篇: How to add button to custom notification and respond to the button accordingly?