我是Facebook SDK的新手,我正在尝试设置一个循环来运行FBPlacePickerViewController中提供的10个附近位置,然后获取并存储数组中的经度和纬度。以下是该视图的示例:
我发现我可以像这样获取和存储long和lat:
- (void)facebookPlaces {
FBPlacePickerViewController *placePickerController = [[FBPlacePickerViewController alloc] init];
placePickerController.title = @"Nearby Places";
NSString *placeName = placePickerController.selection.name;
if (!placeName) {
placeName = @"<No Place Selected>";
}
// This grabs the long and lat of each place selected:
NSString *firstLat = [[NSString alloc] initWithFormat:@"%f", placePickerController.locationCoordinate.latitude];
NSLog(@"First Lat: %@", firstLat);
NSString *firstLong = [[NSString alloc] initWithFormat:@"%f", placePickerController.locationCoordinate.longitude];
NSLog(@"First Long: %@", firstLong);
}
现在,我想设置一个循环,以编程方式选择10个最近的位置,然后将长和lats存储在一个数组中。我有两个问题:首先,我不确定如何以编程方式选择/获取10个位置。我可以手动启动应用,启动此视图,点按仅一个,然后仅在点击“完成”时收集信息。我希望通过代码单独选择10。有谁知道如何创建这样的循环?或者,如果有更好的方法?我对代码很陌生。
编辑:看起来FQL是获取10个最近地点的长和纬线的最佳方式。这是我到目前为止编写的代码(感谢Paulw11的所有帮助)。唯一的问题是我遇到了“错误:操作无法完成。(com.facebook.sdk错误5.)”。这就是我的代码的样子:
- (void)facebookPlaces {
NSString *query =
@"SELECT page_id FROM place WHERE distance(latitude, longitude, 37.75377496892, -122.42077080676) < 500 limit 10";
// Set up the query parameter
NSDictionary *queryParam = @{ @"q": query };
// Make the API request that uses FQL
[FBRequestConnection startWithGraphPath:@"/fql"
parameters:queryParam
HTTPMethod:@"GET"
completionHandler:^(FBRequestConnection *connection,
id result,
NSError *error) {
if (error) {
NSLog(@"Error: %@", [error localizedDescription]);
} else {
NSLog(@"Result: %@", result);
}
}];
}
答案 0 :(得分:2)
您应该在班级中实施FBPlacePickerDelegate
协议,而不是直接访问placePickerController.selection.name
。然后,您可以使用placePickerViewControllerSelectionDidChange:
方法访问所选位置。
FBPlacePickerDelegate
协议还定义了一个方法placePickerViewController:shouldIncludePlace:
,该方法将被添加到选择器的每个位置调用 - 您可以使用此方法捕获数组中的位置。
但是,根据您问题的第二部分,我怀疑您 想要做的事情是在没有用户界面的情况下检索附近的地点。要执行此操作,您需要查询Facebook Graph API此问题的答案Facebook FQL: Get checkins within range使用distance()函数显示FQL查询 - 您应该能够将其用作起点。
您可以使用SELECT page_id FROM place WHERE distance(latitude, longitude, "37.75377496892", "-122.42077080676") < 500 limit 10
之类的FQL查询来检索指定纬度和经度500米范围内的10个地点。
您可以使用Graph API Explorer来试验您的FQL查询。