0

AFNetworking を使用してデータを取得し、レールに支えられたサーバーに POST する iPhone アプリを構築しています。すべてが正常に機能していますが、近くの投稿を読み込むために緯度/経度パラメーターを渡そうとしています。私はそれを正しく設定したと確信しています-herokuログはlat/lngで行われたgetリクエストを示しています-しかし、私が抱えている問題はより基本的なものです. 私の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

私が理解している限り、現在の場所を取得して、 viewDidLoadで呼び出される- (void)loadPosts:(CLLocation *)locationメソッドのパラメーターとして渡す必要があります。

このメソッドをビュー コントローラーに追加します。

-(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 に答える