我有以下代码:
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类。在该课程中,我有一列用于用户名,一列用于仅保存天数的日期。
我想将Parse中保存的日期与当前日期(day2变量)进行比较。如果这些不一样(这意味着用户在另一天登录)swift会将变量Dailybonus和Likelimit设置为0.但如果日期相同则应该保留。我尝试了应用程序,但在每次启动时,它将2个变量dailybonus和Likelimit设置为0甚至thoogh日期是相同的。我认为问题是你无法将解析中保存的值直接与局部变量进行比较。
/编辑:添加了解析数据库的照片。 Parse Database
答案 0 :(得分:1)
当您使用findObjectsInBackground()
这样调用任何内容时,由于此调用的异步性质,随后的代码行将立即执行。这意味着,当您尝试将日期与收到的日期进行比较时,#34;从解析来看,它永远不会是平等的,因为它很可能还没有从服务器接收到数据。相反,您应该将此调用与完成处理程序一起使用,如下所示:
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
}
})