'queryForTable' 不能 return 'nil' 在 Swift
'queryForTable' cannot return 'nil' In Swift
我正在使用 PFQueryTableViewController
作为 ParseUI 的一部分,以根据当前用户的地理位置加载 table 个对象。我看过其他几篇(较旧的)论坛帖子(如 here)详细说明如果 currentLocation:PFGeoPoint?
之类的值为 nil,则 queryForTable
函数应该 return nil。然后等待viewDidLoad
中的后台进程获取PFGeoPoint
和loadObjects()
,从而再次调用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 - 当我的位置设置正确时,上面的代码确实有效。
我正在使用 PFQueryTableViewController
作为 ParseUI 的一部分,以根据当前用户的地理位置加载 table 个对象。我看过其他几篇(较旧的)论坛帖子(如 here)详细说明如果 currentLocation:PFGeoPoint?
之类的值为 nil,则 queryForTable
函数应该 return nil。然后等待viewDidLoad
中的后台进程获取PFGeoPoint
和loadObjects()
,从而再次调用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 - 当我的位置设置正确时,上面的代码确实有效。