简体   繁体   English

添加后,Realm对象返回nil

[英]Realm objects returns nil after adding

I created an Person object when the User logs in: 当用户登录时,我创建了一个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)
     }                    
})

The Person successfully created on the cloud server. 该人员已在云服务器上成功创建。

In the next viewcontroller i like to fetch the object based on the id: 在下一个viewcontroller中,我想根据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"
}

The person is always nil I also tried the query the object with the primary key, but with no success. 这个人总是零,我也尝试用主键查询对象,但是没有成功。

The Person class looks like: 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"
    }
}

UPDATE UPDATE

I created a new app with just one Viewcontroller and the Person class: 我创建了一个只有一个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
            })
        }
    })
  }
}

as with my other problem the person is successfully added to the cloud. 就像我的其他问题一样,此人已成功添加到云中。 but when I restart the app the objects are empty on the first query. 但是当我重新启动应用程序时,第一个查询中的对象为空。 Maybe I miss understanding something with the synched realms? 也许我想念对同步领域有所了解的东西?

let results = realm.objects(Person.self)
let subscription = results.subscribe()
print(results)

resolve my problem 解决我的问题

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM