2011-03-03 146 views
1
Car class 
-------------- 
price 
color 

崩潰的代碼是:的NSMutableArray removeAllObjects崩潰

NSMutableArray *list = [[NSMutableArray alloc] init]; 
Car *car = [[Car alloc] init]; 
car.price = 10; 
car.color = 1; 
[list addObject:car]; 

// some code 

[list removeAllObjects]; // Crash here 

爲什麼暴跌,我怎麼能解決這個問題。

什麼也沒有輸出

+3

發佈堆棧跟蹤。 – Max 2011-03-03 01:24:54

+10

打賭你$ 10,如果你真正運行該代碼逐字,它不會崩潰。錯誤出現在「一些代碼」中。 – Chuck 2011-03-03 01:37:39

+0

我認爲創建一個簡單的規則是個不錯的主意:gor crash - 提供堆棧跟蹤。 – Max 2011-03-03 01:41:13

回答

5

我不知道你在段中的「someCode」部分有什麼。您首先註釋掉該代碼並檢查應用程序是否崩潰。如果它仍然崩潰,那麼只考慮我在下面給出的。我的意思是,在確定解決方案沒有問題之前,請在解決方法之前進行以下操作:)

只需嘗試此代碼,看看它現在是否崩潰。我知道它沒有意義,但它也發生在我身上。一旦陣列數爲零,removeAllObjects爲我崩潰。我懷疑一個SDK的bug某處有:(

if([list count]){ 
    [list removeAllObjects]; 
} 
+0

謝謝,它解決了我在[Car dealloc]發佈了導致崩潰的價格 – WangYang 2011-03-04 00:58:14

+0

@ WangYang you didn不提供堆棧跟蹤,所以很難說(雖然這似乎是這種情況)。只是爲了增加它,從我遇到的類似崩潰的堆棧跟蹤是這樣的: '致命的異常:NSRangeException *** - [__ NSArrayM removeObjectAtIndex:]:索引0超出空數組的範圍' 也許這將幫助別人嘗試看看他們是否屬於這種情況。 – 2014-05-08 20:37:21

+0

謝謝!我沒有找到它,但後來我意識到我已經實例化了NSArray而不是NSMutableArray。 – Felipe 2015-11-18 17:22:07

0

在猜測應用程序退出,我說你要發佈list的地方,所以你要​​呼叫被髮送到一個釋放的實例。不可能確保沒有堆棧跟蹤和一些更多的細節,但是 - 這是一個EXC_BAD_ACCESS錯誤還是什麼?

+0

沒有錯誤按摩輸出,應用程序退出沒有什麼 – WangYang 2011-03-03 02:32:25

2

很有可能您會在數組中釋放一個或多個對象太多次。當NSMutableArray嘗試釋放該對象時,它會崩潰,因爲該對象已被處置。

1

我只是碰到了同樣的事情在我的對象的dealloc方法我:

-(void) dealloc 
{ 
    [super dealloc];// <--- le' culprit! 
    [Image_ID release]; 
    [Image_Number release]; 
    [Image_UID release]; 
    [Series_ID release]; 
    [Series_UID release]; 
    [Study_UID release]; 
         // <--- it should be here... 
} 

我搬到下面[超級的dealloc]所有releases..and我[.... removeAllObjects]工作得很好..

0

將數組屬性在接口部分保留,一旦我做了同樣的它爲我工作。只是一次嘗試。

+0

我將它從'(nonatomic,copy)'設置爲'(nonatomic,strong)',它工作。 – KarenAnne 2014-09-04 06:17:19

相關問題