tableView索引与NSArray objectAtIndex之间的冲突

时间:2012-06-07 08:33:31

标签: ios indexing nsarray tableview conflict

我正在实现一个TableView(类ListeExercice),显示一个自定义单元格列表。这些单元格在另一个类(ExerciseiceTableCell类)中定义。

在ListeExercice类中,我在viewDidLoad方法中创建了一个NSArray:

table1 = [NSArray arrayWithObjects:@"exo1", @"exo2", nil];
table2 = [NSArray arrayWithObjects:@"10:00", @"10:00", nil];

然后在同一个班级,我会做所有事情,以便在表格中显示单元格

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection(NSInteger)section
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView

我遇到的问题出现在以下方法中,基本上是为了显示正确的单元格所在的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *exerciceTableIdentifier = @"ExerciceTableCell";
ExerciceTableCell *cell = (ExerciceTableCell *)[tableView dequeueReusableCellWithIdentifier:exerciceTableIdentifier];
if (cell == nil) 
{
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ExerciceTableCell" owner:self options:nil];
    cell = [nib objectAtIndex:0];
} 

//label1 is a label from the cell defined in the ExerciceTableCell class.

cell.label1.text = [tableIntituleExercice objectAtIndex:indexPath.row];

return cell;

}

问题是我在这两行之间发生了冲突:

cell = [nib objectAtIndex:0];

cell.Label1.text = [table1 objectAtIndex:indexPath.row];

显然2“objectAtIndex”之间存在冲突。 我没有任何警告,只是一个应用程序崩溃,一个线程说“线程1:EXC_BAD_ACCESS(代码= 1 ....)

关于我能做什么的任何建议?

1 个答案:

答案 0 :(得分:1)

如果您没有使用ARC,那么这是一个简单的内存管理错误。您必须在这些行中保留两个数组:

table1 = [NSArray arrayWithObjects:@"exo1", @"exo2", nil];
table2 = [NSArray arrayWithObjects:@"10:00", @"10:00", nil];

否则,在调用tableView:cellForRowAtIndexPath:之前,对象将被释放。对于像这样的错误,您通常应该始终使用属性设置器为ivars / properties分配值。制定者关心适当的内存管理。