Iphone 使用ARC填充UITableView崩溃的NSMutableArray的RemoveAllObject

Iphone 使用ARC填充UITableView崩溃的NSMutableArray的RemoveAllObject,iphone,nsmutablearray,Iphone,Nsmutablearray,我的财产是 @property (nonatomic, strong) NSMutableArray *timesArray; 它用于填充我的UITableView中的数据。当我想清除视图时,我会执行以下操作: - (void)clearView { self.nameField.text = @""; self.noteField.text = @""; if ([_timesArray count] > 0) { [self.timesArra

我的财产是

@property (nonatomic, strong) NSMutableArray *timesArray;
它用于填充我的UITableView中的数据。当我想清除视图时,我会执行以下操作:

- (void)clearView {
    self.nameField.text = @"";
    self.noteField.text = @"";
    if ([_timesArray count] > 0) {
        [self.timesArray removeAllObjects];
        [self.customTableView reloadData];
    }
}
NSMutableArray *tempUnsortedArray = [[NSMutableArray alloc] initWithArray:_timesArray];        
        [tempUnsortedArray addObject:_datePicker.date];
        self.timesArray = tempUnsortedArray;
removeAllObjects导致崩溃。我不知道为什么。我环顾四周,很多帖子都在谈论一个物体被高估了。如果我在使用ARC,而不是在任何对象上调用retain/release,会发生什么情况。我的_timesArray只保存从UIDatePicker获取的NSDate对象

我的堆栈跟踪如下所示:

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

    [self clearView];
}

我的插入药丸看起来像:

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

    [self clearView];
}
如果我不移除所有对象,只需执行以下操作:

NSMutableArray *emptyArray = [[NSMutableArray alloc] initWithCapacity:0];
self.timesArray = emptyArray;
这很有效。但是我仍然想知道为什么移除这些对象是无效的

编辑:我在viewDidLoad中初始化数组:

_timesArray = [[NSMutableArray alloc] initWithCapacity:0];
如果要向数组中添加新对象,请执行以下操作:

- (void)clearView {
    self.nameField.text = @"";
    self.noteField.text = @"";
    if ([_timesArray count] > 0) {
        [self.timesArray removeAllObjects];
        [self.customTableView reloadData];
    }
}
NSMutableArray *tempUnsortedArray = [[NSMutableArray alloc] initWithArray:_timesArray];        
        [tempUnsortedArray addObject:_datePicker.date];
        self.timesArray = tempUnsortedArray;
我不确定我在阵列中添加数据的方式是否导致了问题

@property (nonatomic, strong) NSMutableArray *timesArray;
if ([_timesArray count] > 0) 
看起来,你对你的财产进行了如下语法化:

@syntesize timesArray = _timesArray;

您正在检查
\u timesaray
的计数,但正在从
timesaray
中删除对象。我从不为我的属性设置新名称,也不确定它是如何工作的,但我不喜欢它。

您将得到一个
不可识别的选择器:
异常。这可能意味着您认为是
NSMutableArray
的对象不是真正的对象。它可能是一个
NSArray
。在哪里指定对象

要开始调试问题,请在调用
removeAllObjects
之前先调试对象。它报告为什么类型的对象


否则,可能在
timesArray

中有一个非
NSObject
元素。您是否覆盖了timesArray的setter?如果不调用getter,只执行[\u timesArray removeAllObjects]。@mprivat No我不会覆盖timesArray的setter。@Joel如果我执行[\u timesArray removeAllObjects],我也有同样的想法。也许你是从一个NSArray开始的。不只是传递和保留它,而是创建一个可变的copyi po\u timesArray并获得:
(NSMutableArray*)$2=0x06a207b0(2012-05-07 03:36:02+0000)
。我在viewDidLoad中初始化对象。
\uu NSArray
似乎是
NSArray
的内部类名。如果对象是可变数组,则它将是
\uu NSArrayM
。您正在将
\u timesArray
设置为不可变数组。查看设置
\u timesaray
的所有位置。