iOS 6中regionThatFits函数的兼容性问题

昨天发现App一个必挂的场景,跟踪了一下,发现挂在如下语句:

[self.mapView setRegion:[self.mapView regionThatFits:theRegion] animated:NO];

崩溃信息是:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'Invalid Region <center:nan, nan span:nan, nan>'

不过挂掉的时候,theRegion变量是有效的,所以把代码抽离开以便跟踪:

MKCoordinateRegion fitRegion = [self.mapView regionThatFits:theRegion];
[self.mapView setRegion:fitRegion animated:NO];

跟踪发现,regionThatFits函数会将theRegion变量:

(MKCoordinateRegion) theRegion = {
  center = {
    latitude = 30.849
    longitude = 117.749
  }
  span = {
    latitudeDelta = 0.01
    longitudeDelta = 0.01
  }
}

转换为:

(MKCoordinateRegion) fitRegion = {
  center = {
    latitude = nan
    longitude = nan
  }
  span = {
    latitudeDelta = nan
    longitudeDelta = nan
  }
}

我很疑惑,不自禁想起一句程序员经典名言——“以前跑得好好的啊”。

于是我换了台iOS 5的设备尝试,发现是OK的,看来是iOS 6的兼容性问题。于是我把4.3 - 6.0的模拟器跑了一遍,发现都是OK的,只有装iOS 6的真机会导致该问题。

SO上有一个类似问题:http://stackoverflow.com/questions/12568980/mapview-in-ios6-wont-show-certain-zoom-levels-at-latitude-75-north


于是我临时稍作修改:

    MKCoordinateRegion fitRegion = [self.mapView regionThatFits:theRegion];
    if (isnan(fitRegion.center.latitude)) {
        // iOS 6 will result in nan. 2012-10-15
        fitRegion.center.latitude = theRegion.center.latitude;
        fitRegion.center.longitude = theRegion.center.longitude;
        fitRegion.span.latitudeDelta = 0;
        fitRegion.span.longitudeDelta = 0;
    }

不禁想起不少App在iOS 6都会不断闪退⋯⋯

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值