【问题标题】:Why I can not save data in realm为什么我无法在领域中保存数据
【发布时间】:2017-12-12 13:57:14
【问题描述】:

我有 SaveDataToRealm 类。在这堂课中,我试图在领域中存储数据。但我无法得到它。当我在写入后打印领域对象时,它显示的对象没有我尝试写入的值。

class SaveDataToRealm: BaseViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        saveSessionData()
    }

    // MARK:-  save session and Close session
    func saveSessionData() {
        let realm = try! Realm()
        let localSession = TempRingSessionObject()
        if isLiveSession{
           sessionId = RandomStringGenerator.sharedInstance.getUniqueSessionString()
            localSession.sessionId = sessionId!
        } else{
            localSession.class_id = courseSetupDetails["class_id"] as! String
        }
        try! realm.write {
            realm.add(localSession)
        }
    }

通过使用saveSessionData() 函数,我正在初始化领域。在closeSelfSession() 函数中,我试图将数据存储到领域中。

func closeSelfSession(currentTimeStamp:String)  {   
    let realm = try! Realm()
    if !(sessionId ?? "").isEmpty{
        let session = realm.objects(TempRingSessionObject.self).filter("sessionId contains '\(String(describing: self.sessionId))'").last
        try! realm.write {        
            session?.score = "60"           
            session?.timeOfSession = currentTimeStamp
            session?.tempSessionData.append(objectsIn:realm.objects(TempRingDataObject.self).filter("tag = '\(tagString)'"))
        }
    } else{  
        let session =  realm.objects(TempRingSessionObject.self).filter("sessionId contains '\(self.courseSetupDetails["class_id"] as! String)'").last       
        try! realm.write {    
            session?.tempSessionData.append(objectsIn: realm.objects(TempRingDataObject.self).filter("tag = '\(tagString)'"))
            session?.timeOfSession = currentTimeStamp
            session?.score = "75"
        } 
    }
}

我做错了什么? 谢谢!

【问题讨论】:

    标签: ios swift realm


    【解决方案1】:

    您用于过滤的NSPredicates 都有缺陷。

    您永远不应该使用String(describing:) 来比较变量,因为根据确切的类型,它可能会产生意想不到的结果。此外,在谓词中使用单引号时,您告诉编译器查找确切的结果而不是变量的值。在使用 NSPredicates 时,您也不应该使用字符串插值 ("\(variable)"),您应该使用 %@ 格式说明符。

    let session = realm.objects(TempRingSessionObject.self).filter("sessionId contains '\(String(describing: self.sessionId))'").last
    

    应该是

    let session = realm.objects(TempRingSessionObject.self).filter("sessionId CONTAINS @%",self.sessionID).last
    

    这个谓词realm.objects(TempRingDataObject.self).filter("tag = '\(tagString)'")应该是

    realm.objects(TempRingDataObject.self).filter("tag = %@",tagString)
    

    还有你的最后一个谓词,

    realm.objects(TempRingSessionObject.self).filter("sessionId contains '\(self.courseSetupDetails["class_id"] as! String)'"
    

    应该是

    realm.objects(TempRingSessionObject.self).filter("sessionId CONTAINS %@",self.courseSetupDetails["class_id"])
    

    【讨论】:

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