0

我正在构建一个 iphone 应用程序,它使用 AFNetworking 将数据获取和发布到支持 rails 的服务器。一切正常,但现在我正在尝试传递 lat/lng 参数,以便加载附近的帖子。我很确定我设置正确——heroku 日志显示了一个使用 lat/lng 发出的获取请求——但我遇到的问题是一个更基本的问题。在我的 indexViewController 中,在viewDidLoad方法中我尝试调用

[self loadPosts]

但是我遇到了麻烦,因为在此之后,当我定义 loadPosts 并调用 fetchNearbyPosts 方法时,我需要调用 CLLocation 作为其实现的一部分——这会导致未声明的标识符错误。我可以通过声明来解决这个问题:

loadPosts:(CLLocation *)location {

但是,在 viewDidLoad 中,当我更改 [self loadPosts:(CLLocation *)location]; 该行现在收到“位置”的未声明标识符错误。所以我要绕圈子。

我的 fetchNearbyPosts 方法是这样的:

+ (void)fetchNearbyPosts:(CLLocation *)location
          withBlock:(void (^)(NSArray *posts, NSError *error))completionBlock
{
    NSDictionary *parameters = @{
                                 @"lat": @(location.coordinate.latitude),
                                 @"lng": @(location.coordinate.longitude)
                                 };

    [[APIClient sharedClient] getPath:@"/posts" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
        if (operation.response.statusCode ==200) {
        NSArray *posts = [Post postsWithJSON:responseObject];
        completionBlock(posts, nil);
        } else {
            NSLog(@"Recieved an HTTP %d: %@", operation.response.statusCode, responseObject);
            completionBlock(nil, nil);
        }
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        completionBlock(nil, error);
        NSLog(@"Error: %@", error);
    }];
}

我的完整 loadPosts 方法是:

- (void)loadPosts:(CLLocation *)location {
    [Post fetchNearbyPosts:location withBlock:^(NSArray *posts, NSError *error) {
        if (posts) {
            NSLog(@"Recieved %d posts", posts.count);
            self.posts = [NSMutableArray arrayWithArray:posts];
            [self.tableView reloadData];
            [self.tableView setNeedsLayout];
        } else {
            [[[UIAlertView alloc] initWithTitle:@"ERROR"
                                        message:@"Couldn't fetch the posts."
                                       delegate:nil
                              cancelButtonTitle:@"OK"
                              otherButtonTitles:nil] show];
        }
    }];
}

我认为这是非常基本的——但是如何使用 CLLocation 在 ViewDidLoad 中调用 loadPosts?任何帮助将不胜感激。谢谢

4

1 回答 1

0

据我了解,您需要获取当前位置以将其作为- (void)loadPosts:(CLLocation *)location方法的参数传递,该方法将在您的viewDidLoad中调用

将此方法添加到您的视图控制器:

-(CLLocation) getLocation{
    CLLocationManager * locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    locationManager.distanceFilter = kCLDistanceFilterNone;
    [locationManager startUpdatingLocation];
    CLLocation * location = [locationManager location];
    return location;
 }

然后,在你的viewDidLoad中调用这个

[self loadPosts: [self getLocation]]; 
于 2013-07-19T20:50:34.253 回答