iOS 6中regionThatFits函數的相容性問題

來源:互聯網
上載者:User

昨天發現App一個必掛的情境,跟蹤了一下,發現掛在如下語句:

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

崩潰資訊是:
[cpp] 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 
'Invalid Region <center:nan, nan span:nan, nan>' 

不過掛掉的時候,theRegion變數是有效,所以把代碼抽離開以便跟蹤:
[cpp] 
MKCoordinateRegion fitRegion = [self.mapView regionThatFits:theRegion]; 
[self.mapView setRegion:fitRegion animated:NO]; 

跟蹤發現,regionThatFits函數會將theRegion變數:
[cpp] 
(MKCoordinateRegion) theRegion = { 
  center = { 
    latitude = 30.849 
    longitude = 117.749 
  } 
  span = { 
    latitudeDelta = 0.01 
    longitudeDelta = 0.01 
  } 

轉換為:
[cpp] 
(MKCoordinateRegion) fitRegion = { 
  center = { 
    latitude = nan 
    longitude = nan 
  } 
  span = { 
    latitudeDelta = nan 
    longitudeDelta = nan 
  } 

我很疑惑,不自禁想起一句程式員經典名言——“以前跑得好好的啊”。
於是我換了台iOS 5的裝置嘗試,發現是OK的,看來是iOS 6的相容性問題。於是我把4.3 - 6.0的模擬器跑了一遍,發現都是OK的,只有裝iOS 6的真機會導致該問題。

 


於是我臨時稍作修改:

[cpp] 
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; 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.