所以我在parse.com上有一堆对象。类名是“MainInfo”,在名为geoPoint的列中包含地理点。
我通过将以下内容添加到我的.h文件来获取用户位置:
@property (nonatomic, strong) PFGeoPoint *userLocation;
然后将以下内容添加到viewDidLoad:
[PFGeoPoint geoPointForCurrentLocationInBackground:^(PFGeoPoint *geoPoint, NSError *error) {
if (!error) {
self.userLocation = geoPoint;
[self loadObjects];
}
}];
并执行滚动查询表:
- (PFQuery *)queryForTable
{
// User's location
PFGeoPoint *userGeoPoint = self.userLocation;
// Create a query for places
PFQuery *query = [PFQuery queryWithClassName:@"MainInfo"];
// Interested in locations near user.
[query whereKey:@"geoPoint" nearGeoPoint:userGeoPoint];
// Limit what could be a lot of points.
query.limit = 10;
// Final list of objects
_placesObjects = [query findObjects];
return query;
}
Xcode给出了错误*** setObjectForKey: object cannot be nil (key: $nearSphere)
我不知道我做错了什么,据我所知它应该有用。
我与解析文档一起工作让我走到这一步。 Here is a link
答案 0 :(得分:2)
当你进行geoPointForCurrentLocationInBackground
调用时,它有一个完成块。此完成块标记了您具有填充表视图所需信息的点(或者您知道存在错误,您应该执行其他操作)。因此,在调用完成块之前,不应将查询数据显示/加载到表视图中。另外,您没有完成查询所需的信息。
您可以在等待时显示活动指示器。或者,最好在显示此视图之前获取userLocation
,以便在到达此处时始终获得查询的信息。
答案 1 :(得分:1)
出现错误是因为您将nil值传递给whereKey:nearGeoPoint:
,因为self.userLocation
不太可能在第一次加载视图时设置。你会想要做两件事:
在queryForTable
方法中,检查self.userLocation
是否为零。如果是,则返回nil。这可以作为无操作,表格不会显示任何数据。
- (PFQuery *)queryForTable
{
if (!self.userLocation) {
return nil;
}
// User's location
PFGeoPoint *userGeoPoint = self.userLocation;
// Create a query for places
PFQuery *query = [PFQuery queryWithClassName:@"MainInfo"];
// Interested in locations near user.
[query whereKey:@"geoPoint" nearGeoPoint:userGeoPoint];
// Limit what could be a lot of points.
query.limit = 10;
// Final list of objects
_placesObjects = [query findObjects];
return query;
}
在geoPointForCurrentLocationInBackground:
完成功能块中,设置self.userLocation
值后,您需要拨打[self loadObjects]
。这将告诉PFQueryTableViewController
再次运行您的查询,这次self.userLocation
周围不会为零,允许您构建原始查询。幸运的是,您已经执行了此步骤,但我已将其包含在此处,以防其他人有同样的问题。