2017-12-12 2 views
1

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" 
     } 
    } 
} 

내가 뭘 잘못하고 있니? 감사합니다.

답변

0

필터링에 사용 된 NSPredicate에는 모두 결함이 있습니다.

정확한 유형에 따라 예상치 못한 결과가 발생할 수 있으므로 변수를 비교할 때는 String(describing:)을 사용하지 마십시오. 또한 술어에서 작은 따옴표를 사용할 때 컴파일러에서 변수의 값이 아닌 정확한 결과를 찾도록 지시합니다. NSPredicate으로 작업 할 때 문자열 보간 ("\(variable)")을 사용하면 안되므로 %@ 형식 지정자를 사용해야합니다.

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

실제로

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

012을해야이 술어 realm.objects(TempRingDataObject.self).filter("tag = '\(tagString)'")

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

그리고 마지막 술어를해야

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

해야한다

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