2012-01-03 113 views
0

我已經在應用程序delegate.h中定義了一個屬性,並將其合成到delegate.m文件中以使其成爲全局變量並從整個應用程序中獲取其值:iPhone錯誤:線程1:程序接收到的信號:「SIGABRT」

@property (strong, nonatomic) NSArray *accountsList; 

在mainviewcontroller我的NSArray指定賬戶*值,這樣這個全局值:

((VektorAppDelegate *)[UIApplication sharedApplication].delegate).accountsList = accounts; 

而在pickerviewcontroller我將其值改爲像另一個數組分配

accountsArray = ((VektorAppDelegate *)[UIApplication sharedApplication].delegate).accountsList; 

然後將其分配給一個選擇器視圖:

- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component { 
    return [accounts count]; //Thread 1: Program received signal: "SIGABRT" 
} 

現在,這裏在這一點上我點,我得到一個錯誤,我的應用程序崩潰,有時工作,有時它給錯誤。我沒有得到什麼問題。

+0

你在哪個類中調用pickerview?因爲你正在使用'[accounts count]',在你命名爲'accountsArray'之前。那麼你爲什麼不使用'return [accountsArray count];'? – Jules 2012-01-03 08:24:46

+0

accountsArray在主視圖中用於檢查是否有一個或多個帳戶。並且帳戶正在選取器視圖帳戶中使用,其中所有這些帳戶都將顯示在選取器視圖中,以便用戶選擇他的帳戶 – AppDeveloper 2012-01-03 08:31:25

+0

是否有可能在某個時刻發佈了它?在numberofRows方法上返回nil不會使其崩潰,但將NULL傳遞給count方法會。 – CodaFi 2012-01-03 08:37:32

回答

0

我有一個想法...做一個方法來檢查兩個數組是否相等。因此,像

if ([(Appdelegate*).....delegate.array isEqualToArray:Accountslist]) {NSLog:(@"equal")} 

如果的NSLog的正確,你就完蛋了......但是,如果沒有,那麼它只是意味着你沒有正確初始化您的數組。

2

這裏輸入您的代碼您收到的SIGABRT

所以,首先你試試就知道了原因,SIGABRT的背後,您可以輕鬆地修復指出SIGABRT

我想告訴,SIGABRT基本上發生了很多原因。

1),當我們試圖訪問解除分配(釋放)實例/對象

2)或發送釋放消息,釋放已經(發行日期)實例/對象。

3)還有更多...

因此,對於瞭解背後SIGABRT消息的確切原因。

應設置在環境變量NSZombieEnabled標誌,YES

您可以設置此NSZombieEnabled如下

* *產品 - >新方案 - >環境變量

在環境變量點擊 「+」 按鈕**

Then Type NSZombieEnabled and Set YES對應於其標誌值。

我希望它會幫助你修復那個SIGABRT問題。