我们正在一个应用程序来与iOS 8的兼容,但在同一时间,我们的一些开发人员不必Xcode的6然而,让他们得到想要打电话的时候,这个错误
[self.locationManager requestAlwaysAuthorization];
即使是内部的,如果
if(floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_7_1) {
[self.locationManager requestAlwaysAuthorization];
}
我们怎样才能解决这个编译在Xcode的5?
以下是解决这个问题的正确方法。 这里假设你的应用程序具有的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
接受的答案并没有为我的特殊情况工作。 由于建设环境的限制(的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'