CLLocationManager不会向didUpdateLocations方法发送位置

时间:2013-03-27 10:41:55

标签: iphone ios objective-c core-location cllocationmanager

我正在使用启用了iOS 6.1 iPhone app的{​​{1}},这将使用ARC来跟踪设备位置。

更新

我有CLLocationManager来实现DestinationViewController。它创建CLLocationManagerDelegate并进行设置。我已将CLLocationManager导入我的项目。

我尝试了很多调试,可以看到CoreLocation framework已创建且没有错误。但问题是CLLocationManager[CLLocationManager authorizationStatus]kCLAuthorizationStatusNotDetermined之前和之后的。 因此,没有提示要求为此应用程序使用位置服务的权限。因此,这种方法永远不会被解雇。

[self.locationManager startUpdatingLocation];

我也尝试在网上搜索几个小时来寻找类似的例子,但没有运气。 DestinationViewController的代码发布在下面。

接口

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:  
(NSArray *)locations

实施

#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>

@interface DestinationViewController : UIViewController <CLLocationManagerDelegate>

2 个答案:

答案 0 :(得分:7)

您的代码应该有效。

确保您的应用程序有权使用位置服务。

您可以使用以下方法检查代码中的授权状态

 + (CLAuthorizationStatus)authorizationStatus

修改

kCLAuthorizationStatusNotDetermined很可能是由于禁用了位置服务引起的。您应该首先检查位置服务状态。代码应该是这样的

if([CLLocationManager locationServicesEnabled]) {
    // Location Services Are Enabled
    switch([CLLocationManager authorizationStatus]) {
        case kCLAuthorizationStatusNotDetermined:
            // User has not yet made a choice with regards to this application
            break;
        case kCLAuthorizationStatusRestricted:
            // This application is not authorized to use location services.  Due
            // to active restrictions on location services, the user cannot change
            // this status, and may not have personally denied authorization
            break;
        case kCLAuthorizationStatusDenied:
            // User has explicitly denied authorization for this application, or
            // location services are disabled in Settings
            break;
        case kCLAuthorizationStatusAuthorized:
            // User has authorized this application to use location services
            break;
    }
} else {
    // Location Services Disabled
}

答案 1 :(得分:-14)

我终于解决了!我的代表没有正确设置。 而不是做:

self.locationManager.delegate = self;

我把它改为:

[self.locationManager setDelegate:self];

现在我的委托方法被解雇了。

感谢那些帮助过的人!