我正在构建一个iphone应用程序,使用AFNetworking将GET和POST数据发送到支持rails的服务器。 一切正常,但现在我试图传递lat / lng参数,以便我加载附近的帖子。我很确定我正确设置了 - 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);
}];
}
我的fullPosts方法是:
- (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? 任何帮助将不胜感激。 感谢
答案 0 :(得分:0)
据我了解,您需要将当前位置作为 - (void)loadPosts:(CLLocation *)位置方法的参数传递给它,该方法将在您的<<强> 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]];