我有一个非常简单的UITableView,它有3个部分,每个部分有3行。
#pragma mark -
#pragma mark UITableView delegate methods
- (NSInteger)tableView:(UITableView *)tblView numberOfRowsInSection:(NSInteger)section
{
return 3;
}
- (UITableViewCell *)tableView:(UITableView *)tblView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tblView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
// Configure the cell...
return cell;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tblView
{
if (tblView == self.tableView) {
return 3;
}
else {
return 1;
}
}
一切都很好,但是一旦我滚动我的应用程序崩溃,我的调试器告诉我:
***** - [ProfileViewController tableView:cellForRowAtIndexPath:]:发送到解除分配的实例0x5ae61b0的消息**
我不确定我做错了什么。
编辑: 这就是我显示ProfileViewController的方式:
ProfileViewController* profileView = [[ProfileViewController alloc] initWithNibName:@"ProfileViewController" bundle:nil];
profileView.user_name = username;
profileView.message_source = messageSource;
[self.navigationController pushViewController:profileView animated:YES];
[profileView release];
答案 0 :(得分:2)
看起来您的ProfileViewController
实例正在以某种方式解除分配。确保在创建后没有调用-autorelease
。
答案 1 :(得分:1)
您的代码似乎正确。您的错误可能出现在您的模型或单元配置中。打开zombie support以搜索此类错误。
答案 2 :(得分:0)
答案 3 :(得分:0)
而不是使用
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
请使用
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
并按以下方式更改您的实施代码:
请勿在“cellForRowAtIndexPath”方法中使用以下代码。而是使用“didSelectRowAtIndex”方法。
在标题(.h)文件中:
ProfileViewController * profileView;
在实施(.m)档案中
如果(profileView ==无) profileView = [[ProfileViewController alloc] initWithNibName:@“ProfileViewController”bundle:nil]; profileView.user_name = username; profileView.message_source = messageSource; [self.navigationController pushViewController:profileView animated:YES];