繁体   English   中英

'CLLocationManager'的可见@interface没有声明选择器'requestAlwaysAuthorization'

[英]No visible @interface for 'CLLocationManager' declares the selector 'requestAlwaysAuthorization'

我们正在开发一个与iOS 8兼容的应用程序,但与此同时,我们的一些开发人员还没有Xcode 6,因此他们在尝试调用时遇到此错误

[self.locationManager requestAlwaysAuthorization];

即使在if里面

if(floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_7_1) {
    [self.locationManager requestAlwaysAuthorization];
}

我们如何解决这个问题以在Xcode 5上进行编译?

以下是处理此问题的正确方法。 假设您的应用具有iOS 7.x或更早版本的“部署目标”,并且您需要使用“基础SDK”的不同值来编译项目(例如Xcode 6下的iOS 8和Xcode 5下的iOS 7):

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
    // Being compiled with a Base SDK of iOS 8 or later
    // Now do a runtime check to be sure the method is supported
    if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
        [self.locationManager requestAlwaysAuthorization];
    } else {
        // No such method on this device - do something else as needed
    }
#else
    // Being compiled with a Base SDK of iOS 7.x or earlier
    // No such method - do something else as needed
#endif

接受的答案不适用于我的特殊情况。 由于构建环境的限制(Phonegap / Cordova),我只能使用iOS7 SDK进行编译。

我实现了以下内容(如评论中所建议):

 if([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
    // Use performSelector: so compiler won't blow up on this
    [self.locationManager performSelector:@selector(requestAlwaysAuthorization)];
}    

它可能显示编译器警告,但至少在特定情况下有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM