简体   繁体   中英

Cannot save data to realm

I cannot seem to save data to realm in Swift!

In one of my classes I have the following:

func getDeviceIdAndPersist(){
 print("getDeviceIdAndPersist")
 let realm = try! Realm()
 let realmWallet = RealmWallet()
 let realmResults = realm.objects(RealmWallet.self)
 for results in realmResults {
   guard results.deviceId != nil else {
     realmWallet.deviceId = NSUUID().UUIDString
     try! realm.write() {
       realm.add(realmWallet, update: true)
     }
    return
   }
 }
}

And it does not seem to save the data! I have code similar to this throughout my application and its saving data but this isn't!

Also I'm having trouble trying to persist my data, after i launch the application the data is stored using realm (which i can verify using the realm browser). However, once I re-launch the application the data no longer exists in realm! Does anyone have any suggestions as to why the data would not be persisted?

EDIT 1

Here is my realm class

class RealmWallet: Object {
  dynamic var publicKey = NSData()
  dynamic var preferredAddress = ""
  dynamic var id = 0
  let walletAddresses = List<Addresses>()
  dynamic var fee: NSNumber = 0.0
  dynamic var deviceId: String? = nil
  dynamic var tempPreTax: String? = nil
  dynamic var portalToken: String? = nil
  let walletHasBackup = RealmOptional<Bool>()
  let alreadyAskedForBluetooth = RealmOptional<Bool>()
  let insecureMailSent = RealmOptional<Bool>()
  let cameraAccessGranted = RealmOptional<Bool>()
  let idNowSuccess = RealmOptional<Bool>()
  dynamic var marketInfos = NSData()

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

}

EDIT 2

The NSUUID isn't the only data which I cannot save, the following is another example of data which I cannot seem to save using Realm:

onboardingModal!.bluetoothPressed = {() -> Void in
 print("after onboardingModal")
  self.cbManager = CBCentralManager(delegate: self, queue: nil)
  print("REALM")
  let realm = try! Realm()

  do {
    try! realm.write {
      print("IN WRITE")
      self.realmWallet.alreadyAskedForBluetooth.value = true
      realm.add(self.realmWallet, update: true)
    }
  }
}

If your Results count is 0, it will not enter your for loop. Try this instead.

func getDeviceIdAndPersist() {
    let realm = try! Realm()
    let realmResults = realm.objects(RealmWallet.self)
    guard results.count > 0 else {
        let realmWallet = RealmWallet()
        realmWallet.deviceId = NSUUID().UUIDString
        try! realm.write() {
          realm.add(realmWallet, update: true)
        }
        return
    }
}

I faced the same problem. In my realm class i was missing @objc dynamic in front of stored properties. So added it like below. Then it worked for me.

 @objc dynamic var address: Addres!
 @objc dynamic var checklist: Checklist!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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