我使用坐标来获取天气并且工作正常。城市名称显示在UILabel上。一切顺利,直到我在我的iPhone上运行应用程序,出现的城市名称是完全错误的。
我认为也许模拟器仍然决定了位置,但是当我断开手机并运行应用程序时,它仍然显示错误的城市。
有谁知道这个问题?当我在手机上运行应用程序或者你认为它与代码有关时,模拟器是否会困扰应用程序?
编辑:
我使用Reactive Cocoa和CLLocationManager
- (id)init {
if (self = [super init]) {
_locationManager = [[CLLocationManager alloc] init];
_locationManager.delegate = self;
_client = [[WXClient alloc] init];
[[[[RACObserve(self, currentLocation)
ignore:nil]
// Flatten and subscribe to all 3 signals when currentLocation updates
flattenMap:^(CLLocation *newLocation) {
return [RACSignal merge:@[
[self updateCurrentConditions],
[self updateDailyForecast],
[self updateHourlyForecast]
]];
}] deliverOn:RACScheduler.mainThreadScheduler]
subscribeError:^(NSError *error) {
[TSMessage showNotificationWithTitle:@"Fel" subtitle:@"Det gick inte att hämta vädret."
type:TSMessageNotificationTypeError];
}];
}
return self;
}
- (void)findCurrentLocation {
self.isFirstUpdate = YES;
[self.locationManager startUpdatingLocation];
}
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
if (self.isFirstUpdate) {
self.isFirstUpdate = NO;
return;
}
CLLocation *location = [locations lastObject];
if (location.horizontalAccuracy > 0) {
self.currentLocation = location;
[self.locationManager stopUpdatingLocation];
}
}
- (RACSignal *)updateCurrentConditions {
return [[self.client fetchCurrentConditionsForLocation:self.currentLocation.coordinate]
doNext:^(WXCondition *condition) {
self.currentCondition = condition;
}];
}
答案 0 :(得分:0)
解决了!愚蠢的错误。仅更新了viewDidLoad中的标签,因此城市名称没有改变,但坐标是正确的。
答案 1 :(得分:0)
在代码中,一旦准确度大于0,就会停止更新位置,但如果精度为10,000km会怎样?您应该检查位置是否有效,然后确定精度是否低于某个值。该属性的命名不是很好。在这种情况下,精度的较低值是更准确的位置。