'queryForTable' 不能 return 'nil' 在 Swift

'queryForTable' cannot return 'nil' In Swift

我正在使用 PFQueryTableViewController 作为 ParseUI 的一部分,以根据当前用户的地理位置加载 table 个对象。我看过其他几篇(较旧的)论坛帖子(如 here)详细说明如果 currentLocation:PFGeoPoint? 之类的值为 nil,则 queryForTable 函数应该 return nil。然后等待viewDidLoad中的后台进程获取PFGeoPointloadObjects(),从而再次调用queryForTable函数。

我看到其他人说 Swift 的 ParseUI 库可能没有允许 nil returns 的 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? {
...
}

我尝试的解决方法是 return PFQuery() 而不是零,但我相信 returns after viewDidLoad self.loadObjects()。我看到的行为是带有单元格结果的 table 瞬间闪现,然后是空的 table.

Here is a link 到关于这个问题的 Google 小组讨论,Hector Ramos 说它适用于 Objective-C 但不适用于 Swift(...还没有? ).我是 运行 截至此发布 (1.1.6) 的最新 ParseUI。

在 Swift 中是否有执行此操作的选项?如果没有,什么时候?

如果这不是一个选项,人们已经成功尝试过哪些解决方法?

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

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

PS - 当我的位置设置正确时,上面的代码确实有效。