我使用PFQueryTableViewController
作为ParseUI的一部分,根据currentUser的地理位置加载对象表。我已经看过其他几个(较旧的)论坛帖子(如here),详细说明如果queryForTable
之类的值为零,则currentLocation:PFGeoPoint?
函数应返回nil。然后等待viewDidLoad
中的后台流程获取PFGeoPoint
和loadObjects()
,从而再次调用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中还有一个选项吗?如果没有,何时?
如果这不是一个选项,那么人们成功尝试了哪些解决方法?
答案 0 :(得分:0)
我实际上想出了这个问题 - 与代码本身无关。显然,当您在iOS模拟器上设置虚假位置时,当您使用插入的真实iOS设备时,它也会强制执行不同的位置。我的结果没有显示,因为合法地没有{{1的对象靠近我的位置(因为它以为我在伦敦!)
无论如何,这个故事的寓意是要确保你总是知道模拟器和物理iOS设备中的预设位置。
PS - 当我的位置设置正确时,上面的代码可以正常工作。