对于“CLLocationManager”不可见@interface声明选择“requestAlwa

2019-09-28 12:01发布

我们正在一个应用程序来与iOS 8的兼容,但在同一时间,我们的一些开发人员不必Xcode的6然而,让他们得到想要打电话的时候,这个错误

[self.locationManager requestAlwaysAuthorization];

即使是内部的,如果

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

我们怎样才能解决这个编译在Xcode的5?

Answer 1:

以下是解决这个问题的正确方法。 这里假设你的应用程序具有的iOS 7.x中的“部署目标”或更早的版本,你需要编译不同值的项目为“基地SDK”(例如iOS 8的Xcode 6和iOS 7的Xcode 5下下):

#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


Answer 2:

接受的答案并没有为我的特殊情况工作。 由于建设环境的限制(的PhoneGap /科尔多瓦)我卡在编译仅针对iOS7 SDK。

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

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

这可能表明编译器警告,但ATLEAST它在特定的情况下工作。



文章来源: No visible @interface for 'CLLocationManager' declares the selector 'requestAlwaysAuthorization'