2014-03-25 78 views
0

在我的iOS7應用程序中,我有一個名爲ICVModel的單例。當應用程序啓動時,此單身人士將被初始化並創建CLLocationManager,立即開始更新位置。這工作正常,CLLocationManagerICVModel的強大財產。我實施了didUpdateLocations:,總是把最後的位置保存到ICVModel在這個單身人士身上的強大財產。當應用程序變爲活動狀態時,didUpdateLocations中的Exc_bad_acces

我的問題是,當應用程序被切換到後臺與比再次變得活躍,我一直在didUpdateLocations:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 
{ 
    [ICVModel sharedSingleton].lastLocation = [locations lastObject]; //EXC_BAD_ACCESS 
} 

而且我的應用程序獲得EXC_BAD_ACCESS採用基於區域的通知,所以是不是可以在這這種方法在應用程序處於後臺時調用(並且ICVModel被釋放?)?

我不知道爲什麼......非常感謝!

+0

這可能會幫助你http://stackoverflow.com/questions/327082/exc-bad-access-signal-received –

+0

更可能其中之一是零,你可以把NSLog放在代碼行的前面以顯示他們的內容 – Flexicoder

+0

我認爲你的單例實現有問題,但肯定設置了一個異常斷點,並看到回溯 – sage444

回答

0

修正了它。問題在於別的。在一個ViewController中,我爲這個lastLocation屬性更改添加了一個觀察者,並沒有刪除它......當應用程序進入後臺時,VC被釋放(我手動執行),但單例仍在運行,並且正在嘗試調用observeValueForKeyPath: ofObject:取消分配的對象( - > EXC_BAD_ACCESS)。

基本上,這導致了該問題(在某些VC):

[[ICVModel sharedSingleton] addObserver:self 
           forKeyPath:@"lastLocation" 
            options:NSKeyValueObservingOptionNew 
            context:NULL]; 

和這個固定:

- (void)viewDidDisappear:(BOOL)animated { 
    [[ICVModel sharedSingleton] removeObserver:self 
            forKeyPath:@"lastLocation"]; 
} 

謝謝大家的幫助,並希望這將幫助至少有人...

相關問題