我正在构建一个支持rails的iphone应用程序,该应用程序使用AFNetworking在特定位置创建帖子。所以post模型有lat / lng参数,应该用客户端的当前位置填充。 此时,可以创建帖子,但是lat / lng变为null。 在我的(保存:)方法中,我传递条件以查看是否找到了位置 - 这是失败的,即记录“无位置”。
- (void)save:(id)sender {
[self getLocation];
NSArray *locations;
CLLocation *location = [locations objectAtIndex:0];
Post *post = [[Post alloc] init];
post.content = self.contentTextView.text;
post.photoData = UIImagePNGRepresentation(self.imageView.image);
[self.view endEditing:YES];
ProgressView *progressView = [ProgressView presentInWindow:self.view.window];
if (location) {
[post savePostAtLocation:location withBlock:^(CGFloat progress) {
[progressView setProgress:progress];
} completion:^(BOOL success, NSError *error) {
[progressView dismiss];
if (success) {
[self.navigationController popViewControllerAnimated:YES];
} else {
NSLog(@"ERROR: %@", error);
}
}];
} else {
NSLog(@"No Location");
}
}
我也试图像这样实现一个locationManager
-(void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations {
[self getLocation];
}
-(CLLocation *) getLocation{
CLLocationManager * locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
self.locationManager.distanceFilter = 80.0f;
[locationManager startUpdatingLocation];
CLLocation * location = [locationManager location];
return location;
}
我认为理想情况下我会在CLLocationManagerDelegate中实现savePostAtlocation,我可以在这里传递locations数组:
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations
{
CLLocation *location = [locations objectAtIndex:0 /* firstObject */];
if (location) {
[Post createPostAtLocation:location...
但是我希望在onSave上创建帖子,所以我试图找出位置,但遇到了一些问题.. 如何正确获取当前位置并将其传递到字典中? 对此有任何建议将不胜感激。谢谢!
答案 0 :(得分:1)
查看您的代码,我认为您对CLLocationManager的工作方式有一点误解。您似乎试图从[self getLocation]
内拨打locationManager:didUpdateLocations
。这是不正确的。在您按下按钮时调用的save
方法内部尝试这样的事情(我会删除测试时当前在那里的代码):
CLLocationManager * locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
self.locationManager.distanceFilter = 80.0f;
[locationManager startUpdatingLocation];
然后它将开始生成位置数据。发生这种情况时,手机会自动快速拨打locationManager:didUpdateLocations
。然后,在locationManager:didUpdateLocations
中,您可以使用:
CLLocation * location = [manager location];
NSLog(@"%@", location);
在控制台中查看您的位置数据。
我在这里写的内容应该让手机为您生成位置数据。您对createPostAtLocation:
中locationManager:didUpdateLocations
的评价可能是正确的方法。获取位置数据后,请调用[manager stopUpdatingLocation]使手机停止,然后将您获得的位置数据发布回服务器。