【问题标题】:Realm objects returns nil after adding领域对象添加后返回 nil
【发布时间】:2018-11-28 08:40:44
【问题描述】:

我在用户登录时创建了一个 Person 对象:

let creds = SyncCredentials.jwt(accessToken)
SyncUser.logIn(with: creds, server: Constants.syncAuthURL, onCompletion: { [weak self](user, err) in
    if let user = user {
        self?.setDefaultRealmConfiguration(with: user)
        let realm = try! Realm()
        let identity = (user.identity)!

        let person = Person()
        person.id = identity
        try! realm.write {
          realm.add(person, update: true)
        }

        self?.performSegue(withIdentifier: "showProfile", sender: self)
     }                    
})

人在云服务器上成功创建。

在下一个视图控制器中,我喜欢根据 id 获取对象:

let realm = try! Realm()
guard let uuid = SyncUser.current?.identity! else { return }
let person = realm.objects(Person.self).filter("id = %@", uuid).first

try! realm.write {
  person?.name = "test"
}

人总是 nil 我也尝试使用主键查询对象,但没有成功。

Person 类如下所示:

class Person : Object {

    @objc dynamic var id = ""
    @objc dynamic var created: Date = Date()
    @objc dynamic var name = ""
    @objc dynamic var email = ""
    @objc dynamic var avatar : Data?

    override static func primaryKey() -> String? {
        return "id"
    }
}

更新

我创建了一个只有一个 Viewcontroller 和 Person 类的新应用:

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    let creds = SyncCredentials.usernamePassword(username: "admin", password: "test")
    SyncUser.logIn(with: creds, server: Constants.AUTH_URL, onCompletion: { (user, err) in
        if let user = user {

            var config = user.configuration(realmURL: Constants.REALM_URL)
            config.objectTypes = [Person.self]
            Realm.asyncOpen(configuration: config, callback: { (realm, error) in

                guard let realm = realm else {return}

                let objects = realm.objects(Person.self)

                print(objects) // always empty why???

                try! realm.write {
                    let p = Person()
                    p.id = "test"
                    realm.add(p)
                }
                print(objects) // one object
            })
        }
    })
  }
}

与我的其他问题一样,此人已成功添加到云中。但是当我重新启动应用程序时,第一个查询中的对象是空的。也许我错过了对同步领域的理解?

【问题讨论】:

  • SyncUser.current?.identity!会给你一个可选的字符串..像 Optional("uuid") 之类的东西。试试 SyncUser.current!.identity!反而。但是,如果您对 uuid 使用保护器会更好。
  • 我为 uuid 添加了保护,对象仍然是 nil。我还尝试将 id 设置为固定字符串并进行查询。但即便如此,结果也是空的。
  • 哦,如果您删除对象过滤器,您正在寻找的用户对象是否在找到的对象中?
  • 没有结果是空的
  • 似乎 Person 对象没有添加到领域,或添加到另一个领域文件。

标签: swift realm realm-cloud


【解决方案1】:
let results = realm.objects(Person.self)
let subscription = results.subscribe()
print(results)

解决我的问题

【讨论】:

    猜你喜欢
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多