2012-05-07 2 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 и не вызываю сохранение/освобождение на каких-либо объектах. Мой _timesArray просто содержит объекты NSDate, которые я получаю от UIDatePicker.

Мой трассировки стека выглядит следующим образом:

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; 

Этот работает. Но мне все равно хотелось бы знать, почему, удалив объекты, он не работает.

Edit: я инициализировать массив в viewDidLoad:

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

Когда я хочу, чтобы добавить новый объект в массив, я делаю это:

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

Я не уверен, если путь Я добавляю данные, которые массив вызывает проблему или нет.

+0

Вы переопределили сеттер для timesArray? – mprivat

+0

Что произойдет, если вы не вызываете геттер и просто выполняете [_timesArray removeAllObjects]? – Joel

+0

@mprivat Нет Я не могу переопределить сеттер для timesArray. – Crystal

ответ

1

Вы получаете исключение doesNotRecognizeSelector:. Вероятно, это означает, что объект, который, по вашему мнению, является NSMutableArray, на самом деле не один. Вероятно, это NSArray. Где вы назначаете объект?

Чтобы начать отладку проблемы, po объект перед вызовом removeAllObjects. О каком типе объекта сообщается?

В противном случае возможно, что есть элемент NSObject в timesArray.

+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. Я никогда не устанавливал новое имя для своих свойств и не знаю, как это работает, но мне это не нравится.

Смежные вопросы