将当前位置从iPhone发布到rails

时间:2013-07-20 18:14:40

标签: iphone ios afnetworking core-location

我正在构建一个支持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上创建帖子,所以我试图找出位置,但遇到了一些问题.. 如何正确获取当前位置并将其传递到字典中? 对此有任何建议将不胜感激。谢谢!

1 个答案:

答案 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]使手机停止,然后将您获得的位置数据发布回服务器。