-2

所以我在 parse.com 上有一堆对象。类名为“MainInfo”,地理点位于名为 geoPoint 的列中。

我通过将以下内容添加到我的 .h 文件来获取用户位置:

@property (nonatomic, strong) PFGeoPoint *userLocation;

然后将以下内容添加到 viewDidLoad:

[PFGeoPoint geoPointForCurrentLocationInBackground:^(PFGeoPoint *geoPoint, NSError *error) {
if (!error) {
    self.userLocation = geoPoint;
    [self loadObjects];
}
}];

并执行滚动 queryForTable:

- (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)

我不知道我做错了什么,据我所知它应该可以工作。

我与解析文档一起工作让我走到了这一步。这是一个链接

4

2 回答 2

2

当您geoPointForCurrentLocationInBackground拨打电话时,它有一个完成块。这个完成块标志着您拥有填充表格视图所需的信息(或者您知道存在错误并且您应该执行其他操作)。因此,在调用完成块之前,您不应将查询数据显示/加载到表视图中。否则,您没有完成查询所需的信息。

您可以在等待时显示活动指示器。或者,最好userLocation在显示此视图之前获取该视图,以便您在到达此处时始终拥有查询信息。

于 2013-09-03T09:20:42.640 回答
1

出现错误是因为您将 nil 值传递给whereKey:nearGeoPoint:asself.userLocation在第一次加载视图时不太可能设置。你会想做两件事:

  1. 在您的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;
    }
    
  2. 在您的geoPointForCurrentLocationInBackground:完成块中,一旦self.userLocation设置了值,您将需要调用[self loadObjects]. 这将告诉PFQueryTableViewController再次运行您的查询,这一次self.userLocation不会为零,允许您构建原始查询。幸运的是,您已经执行了此步骤,但我已将其包含在此处,以防其他人有相同的问题。

于 2013-09-03T15:01:59.777 回答