什么被弃用了?如何在所有版本中处理它?

Posted

技术标签:

【中文标题】什么被弃用了?如何在所有版本中处理它?【英文标题】:what is deprecated? how to handled it in all the version? 【发布时间】:2014-10-30 06:13:00 【问题描述】:

我正在使用核心位置我的开发目标是 5.0 下面是我开始更新的代码

    self.locationManager = [[CLLocationManager alloc]init];
    [self.locationManager setDelegate:self];
    [self.locationManager startUpdatingLocation];

下面是委托方法

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation

     // Do Something Here

它在 ios 5.0 和 6.0 中调用,但在 iOS 7.0 之后被弃用 所以对于 iOS 7.0 及以上我必须在下面使用

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

    // Do Something Here

我的问题是我是否必须为 7.0 以下和 7.0 以上的 iOS 管理两个单独的委托方法?

如果不是请详细解释我。

【问题讨论】:

【参考方案1】:

请在此处阅读此文档 -

要使其与 iOS 5 兼容,请在此函数中调用较新版本的方法

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation

http://www.devfright.com/how-to-make-didupdatelocations-compatible-with-ios-5-and-ios-6/

【讨论】:

如何处理已弃用的属性? 查看这篇文章 - ***.com/questions/12562152/…【参考方案2】:

将您的开发目标设为 iOS 5.0。如果是这种情况,这些警告将不会出现。您可以使用已弃用的委托,因为正在使用的编译器不知道弃用。现在可能存在您需要在未来的项目中包含此源代码的情况。这些项目可能仅支持 iOS7 及更高版本。如果是这种情况,与两位代表一起工作以避免问题总是安全的。

您也可以像这样使用#pragma 关闭警告:

// pre-iOS6.0
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
    [self dismissModalViewControllerAnimated:YES];
#pragma clang diagnostic pop

欲了解更多信息,请查看此帖子:deprecated warnings in xcode and how to handle deprecation

【讨论】:

以上是关于什么被弃用了?如何在所有版本中处理它?的主要内容,如果未能解决你的问题,请参考以下文章

AUGraph 在 iOS 上被弃用了吗?如果是这样,啥时候?

RXJS 中的 startWith 运算符真的被弃用了吗?

`shouldOverrideUrlLoading` 真的被弃用了吗?我可以用啥代替?

谷歌地图 v2 中是不是弃用了“构造函数 LocationRequest()”?

setTimer 在 Swift 3 中被弃用了吗?

为什么mongo弃用了MongoIterable.forEach(Block)?