从Parse获取数据然后与变量进行比较

时间:2016-01-23 18:44:20

标签: ios swift parse-platform

我有以下代码:

    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

1 个答案:

答案 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
    }
})