我在这里有一些奇怪的事情。我有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搞砸了......
答案 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 ......