2012-05-07 60 views
0

崩潰我的removeAllObjects爲NSMutableArray的用於填充的UITableView與ARC

@property (nonatomic, strong) NSMutableArray *timesArray; 

它是用來填充在我的UITableView的數據屬性。當我想清除我的視圖時,我這樣做:

- (void)clearView { 
    self.nameField.text = @""; 
    self.noteField.text = @""; 
    if ([_timesArray count] > 0) { 
     [self.timesArray removeAllObjects]; 
     [self.customTableView reloadData]; 
    } 
} 

removeAllObjects導致崩潰。我不知道爲什麼。我環顧四周,很多帖子都在談論一個對象被過度發佈。如果我使用ARC並且不在任何對象上調用retain/release,情況如何。我的_timesArray只包含從UIDatePicker獲得的NSDate對象。

我的堆棧跟蹤的樣子:

enter image description here

我insertPill樣子:

- (void)insertPill:(id)sender { 
    //[[NSNotificationCenter defaultCenter] postNotificationName:InsertPillNotification object:self]; 

    [self clearView]; 
} 

如果我不removeAllObjects,只是做:

NSMutableArray *emptyArray = [[NSMutableArray alloc] initWithCapacity:0]; 
self.timesArray = emptyArray; 

這作品。但我仍然想知道爲什麼通過刪除它不起作用的對象。

編輯:我初始化viewDidLoad中的數組:

_timesArray = [[NSMutableArray alloc] initWithCapacity:0]; 

當我想要一個新的對象添加到數組,我這樣做:

NSMutableArray *tempUnsortedArray = [[NSMutableArray alloc] initWithArray:_timesArray];   
     [tempUnsortedArray addObject:_datePicker.date]; 
     self.timesArray = tempUnsortedArray; 

我不知道,如果我正在添加數組導致問題或不是。

+0

你是否覆蓋timesterray的setter? – mprivat

+0

如果你不調用getter,只是做[_timesArray removeAllObjects]會怎麼樣? – Joel

+0

@mprivat不,我沒有重寫timesterray的setter。 – Crystal

回答

1

你會得到doesNotRecognizeSelector:例外。這可能意味着你認爲的對象是NSMutableArray不是真的。這可能是一個NSArray。你在哪裏分配對象?

要調用​​之前開始調試問題,po對象。它報告的是什麼類型的對象?

否則可能有timesArray中的非NSObject元素。

+0

I po _timesArray得到:'(NSMutableArray *)$ 2 = 0x06a207b0 <__ NSArrayI 0x6a207b0>( 2012-05-07 03:36:02 +0000 )''。我在viewDidLoad中初始化對象。 – Crystal

+0

'__NSArrayI'似乎是'NSArray'的內部類名稱。如果對象是一個可變數組,它將是'__NSArrayM'。在某處你將'_timesArray'設置爲一個不可變的數組。看看'_timesArray'正在設置的所有地方。 – ThomasW

0
@property (nonatomic, strong) NSMutableArray *timesArray; 
if ([_timesArray count] > 0) 

看來,你syntesize你的財產是這樣的:

@syntesize timesArray = _timesArray; 

您chacking的_timesArray計數,但是從timesArray刪除對象。我從來沒有爲我的物業設置新的名稱,也不知道它是如何工作的,但我不喜歡它。