0

我有一个财产

@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 只保存从 UIDatePicker 获得的 NSDate 对象。

我的堆栈跟踪如下所示:

在此处输入图像描述

我的 insertPill 看起来像:

- (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];

当我想向数组中添加一个新对象时,我这样做:

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

我不确定我添加数组数据的方式是否会导致问题。

4

2 回答 2

1

你得到一个doesNotRecognizeSelector:例外。这可能意味着您认为是 a 的对象NSMutableArray并不是真正的对象。它可能是一个NSArray. 你在哪里分配对象?

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

否则可能存在非NSObject元素timesArray

于 2012-05-07T02:36:36.277 回答
0
@property (nonatomic, strong) NSMutableArray *timesArray;
if ([_timesArray count] > 0) 

看来,您像这样合成您的财产:

@syntesize timesArray = _timesArray;

您检查 的计数_timesArray,但从中删除对象timesArray。我从来没有为我的属性设置新名称,也不确定它是如何工作的,但我不喜欢它。

于 2012-05-07T02:29:34.563 回答