2013-04-29 72 views
0

當我單擊按鈕時,UIAlertView提示用戶輸入名稱。然後將該名稱創建爲新的「客戶」對象並插入到可變數組中。向UIPickerView添加名稱時應用程序崩潰

有一個單獨的可變數組,名爲'CustListByName',它存儲所有名稱的列表。

即時通訊的問題是,當添加第二個或第三個名稱時,應用程序崩潰。有時會發生在第二次嘗試上,其他時間會在第三次嘗試中發生。除了(lldb)之外,調試器中沒有提供任何信息。該程序報告EXC_BAD_ACCESS,然後它將我轉移到一個包含大量彙編代碼的屏幕上。

碰撞是發生在這些行的代碼:

本質上,它清除名稱的數組,然後它的對象陣列上重新填充基於。我已經逐步研究了一個斷點,但是直到崩潰時,一切似乎都正確無誤。這也令人困惑,爲什麼會發生在第二次或第三次嘗試,而不是第一次。

[custListByName removeAllObjects]; 
    for (Customer *object in custListByObject) { 
     [custListByName addObject:object->name]; 
    } 

這裏是一個客戶創建並每次插入新的客戶按鈕被點擊代碼:

Customer *tempCust = [[Customer alloc] init]; 
    tempCust->name =[[alertView textFieldAtIndex:0] text]; 
    [custListByObject addObject:tempCust]; 
    [tempCust release]; 

我真的很感激這種幫助,謝謝!

+0

我可以假設你正在操作的NSMutableArray與用作UIPicker的數據源的數組是同一個數組嗎? – csundman 2013-04-29 22:17:30

+0

而不是使tempCust->一個公共變量,創建一個類型副本的proprerty。 – 2013-04-29 22:17:43

+0

@darkfoxmrd - 是的,custListbyName是UIPicker的數據源。 – 2013-04-29 22:23:28

回答

0

我懷疑發生的事情是UIPickerView正在嘗試使用您的客戶陣列中的信息加載一行後,您已經清除它,並在重新填充它之前。這會導致訪問錯誤。

你可能會考慮做什麼,而是保留兩個數組,一個用於加載客戶的NSMutableArray和一個NSArray作爲UIPickerView的實際數據源。然後,在重新加載UIPickerView之前,您會說:

dataSourceArray = [loadingArray copy]; 
[pickView reloadAllComponents]; 

希望這會有所幫助。

編輯:

這是你更新的代碼是什麼樣子,如果你裝陣被稱爲loadingCustListByName:

[loadingCustListByName removeAllObjects]; 
    for (Customer *object in custListByObject) { 
     [loadingCustListByName addObject:object->name]; 
    } 
custListByName = [loadingCustListByName copy]; 
[pickView reloadAllComponents]; 

這樣做將確保UIPickerView的數據源陣列始終與行數相匹配它認爲它已經。

相關問題