在Xcode 4.2中开发的选项卡式应用程序中,我发现了一个令人困惑的问题:在其中一个选项卡中,有一个tableview来显示类似索引的内容。所以我在viewDidLoad()方法中初始化了一个数组。例如:
- (void)viewDidLoad
{
NSArray *array = [NSArray arrayWithObjects:@"abc", @"def", @"ghi", @"jkl", @"mno", nil];
self.arrayList = array;
[array release];
[super viewDidLoad];
}
然后我在其他方法中使用这个arrayList:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [arrayList count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
cell.textLabel.text = [arrayList objectAtIndex:indexPath.row];
return cell;
}
但每次运行时Xcode都会给我“EXC_BAD_ACCESS”信号。我放了一些断点,发现数组是在viewDidLoad()中成功创建的,但在运行方法cellForRowAtIndexPath:(NSIndexPath *)indexPath之前,它变成了一个释放的对象。这就是我得到那个信号并且应用程序崩溃的原因。那么,如何解决这个问题?
顺便说一句,发生问题的视图控制器是从UIViewController而不是UITableViewController创建的。但我放了一个表视图并将其数据源和委托链接到File的所有者。那有关系吗?
答案 0 :(得分:1)
你不能release
阵列。 +arrayWithObjects:
便捷方法返回一个无主数组。你永远不会拥有阵列的所有权,因此你不能放弃所有权。删除行[array release]
,您将不会再看到此错误(至少不是因为这个原因)。