Xcode 6 / iOS 8位置模拟不起作用

时间:2014-09-19 13:26:33

标签: ios xcode ios8 xcode6

我刚刚更新到Xcode 6 / iOS 8 SDK,我在模拟器中的位置服务模拟开始无法正常工作。我更新之前没事(我目前无法在真实设备上测试)。现在,当我选择一个模拟位置时,没有任何反应。未调用委托的-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations方法。我重新启动了Xcode,清理了构建文件夹,没有任何改变。为什么会发生这种情况?

5 个答案:

答案 0 :(得分:14)

自IOS 8起,您需要在启动CLLocationManager之前请求授权。

您是否正在调用其中一种方法?

[self.locationManager requestWhenInUseAuthorization];  // For foreground access
[self.locationManager requestAlwaysAuthorization]; // For background access

如果您在XCode 6之前创建了项目,则可能还需要为新权限添加info.plist条目。

有关详细信息,请查看此帖子:Location Services not working in iOS 8

答案 1 :(得分:14)

在方法中添加以下代码

if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) 
{
    [self.locationManager requestWhenInUseAuthorization];
}

同时在info.plist文件

添加以下行

键:NSLocationWhenInUseUsageDescription值:使用当前位置

答案 2 :(得分:2)

使用Xcode 6.3.1我已经让位置选择停止更新。修复是运行另一个项目,选择"模拟位置>不要模拟位置"然后再次构建原始项目以恢复正常的位置设置。

答案 3 :(得分:0)

其他答案是正确的,但我还得在我获得一个位置之前重置模拟器,而它在设备上工作正常。该应用程序最初是在iOS 8之前安装在该模拟器上的。

要重置模拟器:

https://stackoverflow.com/a/16195931

答案 4 :(得分:0)

- (void)startLocationUpdates{
    geocoder = [[CLGeocoder alloc] init];
    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.distanceFilter = kCLDistanceFilterNone;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
        [locationManager requestWhenInUseAuthorization];
    [locationManager startUpdatingLocation];
}

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{

      CLLocation *currentLocation = newLocation;
    if (currentLocation != nil) {
    }

    // Reverse Geocoding
    [geocoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *placemarks, NSError *error) {

        if (error == nil && [placemarks count] > 0) {
            placemark = [placemarks lastObject];
                        fullAddress = [NSString stringWithFormat:@"%@,%@,%@,%@",
                           placemark.thoroughfare,
                           placemark.locality,
                           placemark.administrativeArea,
                           placemark.country];

            subtitleLocation = [NSString stringWithFormat:@"PostalCode::%@",
                                 placemark.postalCode];
        } else {
            //  NSLog(@"%@", error.debugDescription);
        }
    } ];
}

- (void)locationManager:(CLLocationManager *)manager
       didFailWithError:(NSError *)error{

    NSLog(@"Cannot find the location.");
}