2016-01-23 47 views
0

比較我有以下代碼:從解析獲取數據,然後用可變

func compareDate() { 
    let query = PFQuery(className: "DailyBDate") 
    let calendar2 = NSCalendar.currentCalendar() 
    let date2 = NSDate() 
    let components2 = calendar2.components([.Day], fromDate: date2) 
    let day2 = components2.day as Int 


    query.whereKey("User", equalTo: self.username) 
    let DailyBonusDate = query.selectKeys(["Date"]) 
    query.findObjectsInBackground() 


    // seems like its always something else... :/ 
    if(day2 != DailyBonusDate) { 
     self.Dailybonus = 0; 
     self.Likelimit = 0; 
     self.DailybonusDefault.setValue(self.Dailybonus, forKey: "Dailybonus") 
     self.DailybonusDefault.synchronize() 
     self.LikelimitDefault.setValue(self.Likelimit, forKey: "DailyBonus") 
     self.LikelimitDefault.synchronize() 
    } 
} 

我有一個名爲DailyBDate一個解析類。在該課程中,我有一列用於用戶名,一列用於僅保存日期的日期。

我想比較保存在Parse中的日期和當前日期(day2變量)。如果這些不一樣(這意味着用戶在另一天登錄)swift會將變量Dailybonus和Likelimit設置爲0.但是如果日期相同,它應該保持不變。我嘗試了應用程序,但在每次啓動時,它將daybonus和Likelimit的2個變量設置爲0,即使這個日期是相同的。我認爲問題在於你無法將解析中保存的值直接與局部變量進行比較。

/編輯:添加了解析數據庫的照片。 Parse Database

回答

1

當你用findObjectsInBackground()這樣調用任何東西時,由於此調用的異步特性,隨後的代碼行將立即執行。這意味着,當您嘗試將日期與從解析中「接收」的日期進行比較時,它將永遠不會相同,因爲最有可能還沒有從服務器接收數據。相反,你應該使用這樣的呼叫完成處理程序,如下所示:

query.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in 
    if error == nil && objects?.count != 0 { 
     let dailyBonusDate = objects[0] as? NSDate 
     if(day2 != DailyBonusDate) { 
      self.Dailybonus = 0; 
      self.Likelimit = 0; 
      self.DailybonusDefault.setValue(self.Dailybonus, forKey: "Dailybonus") 
      self.DailybonusDefault.synchronize() 
      self.LikelimitDefault.setValue(self.Likelimit, forKey: "DailyBonus") 
      self.LikelimitDefault.synchronize() 
     } 
    } 
    else { 
     an error occurred or there were no results 
    } 
}) 
+0

感謝您的回答,但這並不是我真正想要的。我上傳了一張圖片,也許這可以幫助你理解我的意思:) – Ketarr

相關問題