' queryForTable'不能回归' nil'在斯威夫特

时间:2015-10-23 22:09:12

标签: parse-platform geolocation swift2 pfquery geopoints

我使用PFQueryTableViewController作为ParseUI的一部分,根据currentUser的地理位置加载对象表。我已经看过其他几个(较旧的)论坛帖子(如here),详细说明如果queryForTable之类的值为零,则currentLocation:PFGeoPoint?函数应返回nil。然后等待viewDidLoad中的后台流程获取PFGeoPointloadObjects(),从而再次调用queryForTable函数。

我看到其他人说Swift的ParseUI库可能没有允许nil返回的queryForTable函数。

var currentLocation:PFGeoPoint? = nil

override func viewDidLoad() {
    if currentLocation == nil {
        PFGeoPoint.geoPointForCurrentLocationInBackground {
            (geoPoint: PFGeoPoint?, error: NSError?) -> Void in
            if error == nil {
                print("Got the user's current location!")
                self.currentLocation = geoPoint
                print("Reloading table using user's location")
                self.loadObjects()
            }
        }
    }
}

override func queryForTable() -> PFQuery {

    if self.currentLocation != nil {
        print("Generating query based on user's location!")
        let query = PFQuery(className:self.parseClassName!)
        query.whereKey("taskLocation", nearGeoPoint: self.currentLocation!, withinMiles: 50)

        if(self.objects?.count == 0)
        {
            query.cachePolicy = PFCachePolicy.CacheThenNetwork
        }

        return query
    }

    print("User's current location is not known")
    return nil
}

显然,这无法构建,因为函数不是(注意问号):

override func queryForTable() -> PFQuery? {
...
}

我尝试的解决方法是返回PFQuery()而不是nil,但我相信它会在<{strong> viewDidLoad self.loadObjects()之后返回。我看到的行为是一个带有单元格结果的表的瞬间闪现,然后是一个空表。

Here is a link谷歌集团关于这个问题的讨论,Hector Ramos说它适用于Objective-C而不是Swift(还有?)。我在这篇帖子(1.1.6)中运行了最新的ParseUI。

在Swift中还有一个选项吗?如果没有,何时?

如果这不是一个选项,那么人们成功尝试了哪些解决方法?

1 个答案:

答案 0 :(得分:0)

我实际上想出了这个问题 - 与代码本身无关。显然,当您在iOS模拟器上设置虚假位置时,当您使用插入的真实iOS设备时,它也会强制执行不同的位置。我的结果没有显示,因为合法地没有{{1的对象靠近我的位置(因为它以为我在伦敦!)

无论如何,这个故事的寓意是要确保你总是知道模拟器和物理iOS设备中的预设位置。

PS - 当我的位置设置正确时,上面的代码可以正常工作。