2015-07-20 112 views
1

我遇到了一個問題,但大量的搜索引擎和SO帖子沒有幫助。在我的iOS快速應用程序中,我有一個帶有兩個選項卡的標籤欄控制器。當用戶點擊第二個選項卡時,應用程序切換到第二個屏幕以創建事件。用戶可以自由地在兩個標籤之間切換。在創建事件的第二個選項卡上,用戶可以爲事件添加多個候選位置。用戶能夠添加位置的方式應該是通過地圖,我使用MapKit。我使用push segue將用戶發送到一個新的帶有映射的UIViewController。當用戶點擊添加位置按鈕時,地圖顯示正確(目前我沒有做任何與地圖交互的邏輯)。我的問題是,如果用戶單擊後退按鈕(關閉該地圖畫面),然後再次嘗試添加位置時,UIViewController中會顯示一個灰色的地圖和應用程序將在該行掛起:第二次顯示MapKit失敗,EXC_BAD_ACCESS

class AppDelegate: UIResponder, UIApplicationDelegate { 

和該錯誤信息是:

Thread 1: EXC_BAD_ACCESS (code=1, address=0x103c) 
#0 0x00699440 in EAGLContext_renderbufferStorageFromDrawable(EAGLContext*, objc_selector*, unsigned int, id<EAGLDrawable>)() 

我知道很多SO帖子談到了內存問題,比如這個SO post和我也嘗試瞭解決方案,但它並沒有幫助。

這是我的UIViewController非常簡單的代碼,顯示在地圖:

import UIKit 
import MapKit 
import ObjectMapper 
import CoreLocation 


class AddRestaurantViewController: UIViewController{ 


@IBOutlet weak var theMapView: MKMapView! 


override func viewDidLoad() { 
    super.viewDidLoad(); 
    println("viewDidLoad") 

} 

override func viewWillAppear(animated: Bool) { 
    println("viewWillAppear") 
} 

override func viewWillDisappear(animated: Bool) { 
    println("viewWillDisappear") 
} 

override func viewDidDisappear(animated: Bool) { 
    self.purgeMapMemory() 
} 

func purgeMapMemory(){ 
    println("Now purging...") 
    self.theMapView.mapType = MKMapType.Standard 
    self.theMapView.removeFromSuperview() 
    self.theMapView = nil 
} 

} 

任何提示?

+0

這種情況也發生在我身上。在我的情況下,我推着一個像你一樣的ViewController。更奇怪的是,在使用xcode進行調試時,該應用只會在我的iPhone 6+上崩潰。我仍然在尋找這個問題.. – Jakehao

回答

2

這個問題浪費了我一生的一天。經過大量測試後,我得出結論,這可能是iPhone 6以上的iOS 8.3的一個缺陷。

所以總結起來,

我的應用程序崩潰時,

1)我調試在Xcode在我的iPhone 6加;我構成一個空的UIViewController(RootVC),它包含一個UIButton,它的動作正在推送到另一個只有MKMapView的UIViewController(MapVC);而另一個UIViewController

3)所以,當我點擊按鈕並推送到MapVC,然後通過點擊navigationBar上的後退按鈕返回到RootVC。然後當我再次點擊按鈕推入MapVC時,該應用程序崩潰。

但是,當我沒有從Xcode運行應用程序時,應用程序不會在同一臺設備上崩潰。例如,當我將我的應用程序上傳到Testflight並在iPhone 6 plus上下載應用程序時,它不會崩潰。

此外,我已經在iPhone 5上測試了iPhone 6,並在其上安裝了iOS 8.4。該應用程序不會崩潰。

而我不能通過創建一個新項目來重現問題,並做同樣的事情,崩潰只發生在我現有的項目中。

所以我必須更新我的iPhone 6加到iOS 8.4,然後這個問題消失了。由於它只發生在從Xcode進行調試時發生,我不得不承擔風險,認爲它不會在用戶從應用商店下載應用程序後崩潰。