我想将对象添加到NSMutableArray类型的实例var中,我正在创建一个块(reverseGeocodeLocation)。我可以在定义的对象中看到值。但是我不能让它工作,将它们添加到实例var。
我已经考虑过__block或__strong前缀。但我似乎漏掉了一些东西。你能给我个提示吗?实例var " tableviewwrows "在运行代码块后仍然为空。
谢谢!塞巴斯蒂安。
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
CLLocation *currentLocation = [locations lastObject];
CLGeocoder *geoCoder = [[CLGeocoder alloc] init];
[geoCoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *placemarks, NSError *error) {
if (error == nil && [placemarks count] > 0) {
CLPlacemark *placemark = [placemarks lastObject];
CLLocation *userLocation = [placemark location];
NSString *latitude = [NSString stringWithFormat:@"Lat. %f degrees", userLocation.coordinate.latitude];
NSString *longitude = [NSString stringWithFormat:@"Long. %f degrees", userLocation.coordinate.longitude];
NSString *altitude = [NSString stringWithFormat:@"Alt. %f m", userLocation.altitude];
NSString *speed = [NSString stringWithFormat:@"Speed %f m/s", userLocation.speed];
NSString *course = [NSString stringWithFormat:@"Course %f degrees", userLocation.course];
[self.tableViewRows insertObject:latitude atIndex:0];
[self.tableViewRows insertObject:longitude atIndex:1];
[self.tableViewRows insertObject:altitude atIndex:2];
[self.tableViewRows insertObject:speed atIndex:3];
[self.tableViewRows insertObject:course atIndex:4];
} else {
NSLog(@"%@", error.debugDescription);
}
}];
[self.tableView reloadData];
}
您必须在后台操作完成后重新加载您的表。它应该在完成处理器中。
试试这个
__block NSArray *dataArray;
[geoCoder reverseGeocodeLocation:currentLocation
completionHandler:^(NSArray *placemarks, NSError *error) {
//...
dataArray = @[latitude, longitude, altitude, speed, course];
NSLog(@"Just checking... %@", dataArray);
dispatch_sync(dispatch_get_main_queue(), ^{
self.tableViewRows = [NSMutableArray arrayWithArray:dataArray];
[self.tableView reloadData];
});
}];
我刚刚调试了一下。但还是一样奇怪的东西.....数组self。tableviewws正在填充block内的数据。但是,只要我在外部数组上尝试"count",返回的值就是0。在区块内部,它是5,因为它应该是?!?