领域:'使用每路径配置方法后无法设置默认配置。'斯威夫特2

时间:2015-09-29 18:40:53

标签: database swift swift2 realm

所以我试图为每个登录的用户设置默认域,并且根据领域文档,这可以通过在文档之后附加userId并在那里创建新域并将其设置为每个用户的默认域来完成。

我有一个函数,每次用户登录时都会执行以下代码,以便为该用户提供特定数据。

我收到的错误是

  

***由于未捕获的异常终止应用程序' RLMException',原因:'使用每路径配置方法后无法设置默认配置。'

然而,根据此处的文档:https://realm.io/docs/swift/latest/#realm-configuration

,这似乎是正确的方法

以下是Realm文档代码:

func setDefaultRealmForUser(username: String) {
var config = Realm.Configuration()

// Use the default directory, but replace the filename with the username
 config.path = config.path.stringByDeletingLastPathComponent()
                       .stringByAppendingPathComponent(username)
                       .stringByAppendingPathExtension("realm")

  // Set this as the configuration used for the default Realm
Realm.Configuration.defaultConfiguration = config
 }

这是我的代码(在Swift 2中删除了stringBy ...方法,因此我将其更改为使用NSURL。但是,Realm仍然以字符串形式读取路径。)

    var config = Realm.Configuration()
    let realm = try! Realm()
    // Use the default directory, but replace the filename with the username
    var url = NSURL()
    url = NSURL(fileURLWithPath: config.path!)
    if let url2 = url.URLByDeletingLastPathComponent {
        let url3 = url2.URLByAppendingPathComponent(userId)
        let url4 = url3.URLByAppendingPathExtension("realm")
        config.path = String(url4)
                // Set this as the configuration used for the default Realm
        if let newPath = config.path {
         Realm.Configuration.defaultConfiguration.path = newPath  //fails here

             print("Successfully changed default realm to \(config.path)")
            return
        }
        print("\n\n\n-------ERRORmid setting default realm to \(config.path)----\n\n\n")
        return
    }
    print("\n\n\n-------ERRORlast setting default realm to \(config.path)----\n\n\n")
    return

我试过了两个:

   Realm.Configuration.defaultConfiguration.path = newPath

    Realm.Configuration.defaultConfiguration = config

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

看起来您正在调用以下不推荐使用的函数之一:

setSchemaVersion(_:atPath:migrationBlock:)
// or
Realm.setEncryptionKey(_:forPath:)

Realm.Configuration用法一起使用。这些方法与Realm.Configuration不兼容,因此您应该完全移至Realm.Configuration以避免这些问题。

这些弃用的方法将在Realm Objective-C和Realm Swift的下一个主要版本中完全删除。