启动应用程序时出现EXC_BAD_ACCESS错误

时间:2012-02-06 12:27:08

标签: ios ios5 uitableview exc-bad-access

我在这里有一些奇怪的事情。我有UITableViewController,其中包含协议所需的所有方法,以及我将在其中使用的数据。然后我有这个代码(简化)

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

NSDictionary* cellData = [self.tableViewData objectAtIndex:indexPath.row];
// the rest of the code

return cell;
}

只需点击几下即可执行此TableViewController,因此不会在AppDelegate中或在开头加载的ViewController中的任何位置调用或引用它。 但是,当我在模拟器中构建(成功)并运行应用程序时,它会在显示任何内容之前以EXC_BAD_ACCESS错误退出。我发现当我评论一下时:

NSDictionary* cellData = [self.tableViewData objectAtIndex:indexPath.row];

一切正常。怎么会有这个呢? 此外,tableViewData在viewDidLoad中加载,并且在此行之前未释放,其他一切都正常(我甚至可以删除此行下方的行)。它甚至不应该发送此错误,但它确实发生并且它在应用程序启动时完成。是什么给了什么?

编辑: 这是viewDidLoad方法:

- (void)viewDidLoad {
[super viewDidLoad];

self.tableViewData = [self getABContactsWithMail]; //gets filtered contacts from addressbook, works fine
}

以下是代码的其他部分:

- (void)viewDidUnload {
[super viewDidUnload];
self.tableViewData = nil;
}

-(void)dealloc{
[tableViewData release];
[super dealloc];
}

编辑: 这是我从tableView中的table tableData得到的:cellForRowAtIndexPath:

<__NSArrayM 0xfdcfe30>(
{
email = "test@test.com";
firstName = test;
fullName = "test account";
id = 1;
lastName = account;
phone = "1 (231) 23";
},
{
email = "gmail@email.com";
firstName = nolast;
fullName = nolast;
id = 3;
lastName = "";
phone = "";
},
{
email = "asdkjf@sdfklja.com";
firstName = "";
fullName = nofirst;
id = 4;
lastName = nofirst;
phone = "";
},
{
email = "test@adsfk.com";
firstName = "";
fullName = "aaa.test@adsfk.com";
id = 5;
lastName = "";
phone = "";
}
)

编辑: 我添加了方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

我和虚拟数据的行为相同。似乎UITableViewController本身出了问题,或者我的xcode搞砸了......

2 个答案:

答案 0 :(得分:0)

你能告诉我们你的方法吗? - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

应该是这样的:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [tableViewData count];
}

答案 1 :(得分:0)

我终于通过反复试验找到了它。显然我的UITableViewController实现了一些已在其父类中实现的协议。这就是整个问题......

我真的不知道为什么整个应用程序都会因无关错误而无关紧要。如果这是我的编码错误,那么编译器应该至少警告我。

我还记得我在Xcode 3上没有遇到问题......

我将此作为错误提交给Apple ......