2014-10-10 92 views
2

我正在使用iBeacons,但遇到了一个小问题。CLLocationManager委托未调用

第一次使用时,用户需要赋予权限,然后我们下面被称为:

_locationManager = [[CLLocationManager alloc] init]; 
_locationManager.delegate = self; 
[_locationManager requestAlwaysAuthorization]; 

不过,我预计将称为以下的委托方法:

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status { 
    NSLog(@"Auth status changed: %i", status); 
    if(status > 3){ 
     // Check if we have to start monitoring beacons 
     NSLog(@"Do we need to initialise after auth given?"); 
     //[self initialiseLocations]; 
    } 
} 

我运行iOS 8.0.2,所以不知道这是否是一个错误

+0

你是否设置了对locationManager的强引用,类似'@property(nonatomic,strong)CLLocationManager * locationManager;'? – 2014-10-10 18:36:48

+0

不,但在全球范围内在.h文件中声明它。包含的类很强大,在appDelegate中定义。所有其他回调工作正常,只是这一个。 – 2014-10-10 19:16:36

回答

0

This answer可能会帮助...它至少解决了它。此外,this website对于这个问题也是一个很好的演练。

看起来您正在调用requestAlwaysAuthorization,但您是否在任何地方拨打startUpdatingLocation?另外,请仔细检查在您的Info.plist中您是否已添加适当的密钥和字符串值(因为您使用的是requestAlwaysAuthorization,所以为NSLocationAlwaysUsageDescription)。

+0

我有这些设置,而且它工作正常,否则(我使用它为iBeacons,所以不需要启动startUpdatingLocation,因为这是GPS)。这就是为什么我需要回调,所以我可以发起跟踪信标的请求。 – 2014-10-10 18:53:03

+0

哦,我从来没有使用iBeacons,所以我不完全确定然后...我做了一个快速搜索,然后发现[本教程](http://ibeaconmodules.us/blogs/news/14279747-tutorial-ibeacon -app-development-with-corelocation-on-apple-ios-7-8)过度使用它们,并声明他们对它进行了编辑以便与iOS 8一起使用,所以也许它会有所帮助? – 2014-10-10 19:41:47