dequeueReusableCellWithIdentifier引起的崩溃:用于自定义单元格

时间:2013-11-04 15:02:52

标签: ios tableview

更新 - 解决方法

我找到了解决这些问题的方法:(但我仍然不明白为什么dealloc我们必须在这种情况下使用[_profileImage release];,即使我们不拥有,也alloc { {1}}也newcopy_profileImage

MyUITableView.m

- (void)dealloc {
    [_profileImage release];
    // and all other ivars get released here

    [super dealloc];
}

- (void)onClickLogoutButton {
    if (_profileImage != nil) {
        _profileImage = nil;
    }
    // and other operations
}

当我[_profileImage release];中有onClickLogoutButton时发生崩溃,因为我不拥有(alloc也不new也不copy} {{ 1}},但只需使用_profileImage将对象传递给_profileImage = [UIImage imageWithData:data];

_profileImage

原始问题

以下代码在Xcode 5,iOS 7中使用手动保留释放(MRR)。

- (void)onClickLogoutButton { if (_profileImage != nil) { [_profileImage release]; _profileImage = nil; } // and other operations } 导致崩溃,其中一条错误消息为ProfileCell *cell = (ProfileCell *)[tableView dequeueReusableCellWithIdentifier:identifierForProfileCell];

是因为我错误地发布了什么吗?但我不知道在何时何地以及什么被释放。项目中有一个注销功能,注销后我们应该发布一些内容还是让dealloc来完成这项工作?首次登录时会发生错误,然后注销然后重新登录,滚动到配置文件单元格并崩溃。

我应该在退出后拨打Thread 1: EXC_BAD_ACCESS (code=2, address=0x2448c90c)中的[self reloadData];吗?

MyUITableView.m

MyUITableView.m

1 个答案:

答案 0 :(得分:4)

您之前在tableView中注册了ProfileCell吗?

在viewDidLoad中这样:

- (void)viewDidLoad
  {
    [super viewDidLoad];
    [self.tableView registerClass:ProfileCell  forCellReuseIdentifier:@"ProfileCell"];
  }