滚动时基本UITableView的内存问题

时间:2010-05-24 17:38:41

标签: iphone objective-c cocoa-touch xcode uitableview

我有一个非常简单的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];

4 个答案:

答案 0 :(得分:2)

看起来您的ProfileViewController实例正在以某种方式解除分配。确保在创建后没有调用-autorelease

答案 1 :(得分:1)

您的代码似乎正确。您的错误可能出现在您的模型或单元配置中。打开zombie support以搜索此类错误。

答案 2 :(得分:0)

帮助我解决类似问题的东西是实现以下内容:如果它是另一个视图的子视图,您可能需要通过将其设置为IBOutlet来保留表视图控制器 - 即父级必须以某种方式保留孩子。

答案 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];