-3

这是一个非常常见的问题,虽然我有谷歌并交叉检查我的代码几次但我无法弄清楚崩溃

*** -[MyCustomCell performSelector:withObject:withObject:]: message sent to deallocated instance 0x96f6980

我有一个以MyCustomCellXIB 命名的 CustomCell,其中有 3 个用于 Facebook、Twitter、LinkedIn 的按钮。我在 CustomCell 类中给了他们所有的 IBAction。

当我单击其中任何一个时,我都会遇到这种崩溃。

我正在使用 ARC。

在我的 ViewController 类中,我有cellForRowAtIndexPath

{
        static NSString *CellIdentifier = @"MyCustomCell";
        MyCustomCell *cell = (MyCustomCell*)[myTableView dequeueReusableCellWithIdentifier:CellIdentifier];

        if (cell == nil)
        {
            NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];
            cell = (MyCustomCell *)[nib objectAtIndex:1];
        }
        return cell;
}


MyCustomCell.m

- (IBAction)facebookPressed:(BaseButton *)sender {

}
- (IBAction)twitterPressed:(BaseButton *)sender {

}
- (IBAction)linkedInPressed:(BaseButton *)sender {

}
4

3 回答 3

1

您也可以像这样为自定义单元格编码。在自定义单元格的笔尖处,拖动一个 UIButton 并在 Xib 中设置它的标签。然后使用以下方法:-

UIButton *btnMulSelected;
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NSString *CellIdentifier =[NSString stringWithFormat:@"%d_%d",indexPath.section,indexPath.row];
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil)
        {
            [[NSBundle mainBundle]loadNibNamed:@"cell_custome_iphones" owner:self options:nil];
            cell = self.tblCell;
            self.tblCell = nil;

            btnMulSelected =(UIButton*)[cell.contentView viewWithTag:2];

            [btnMulSelected addTarget:self action:@selector(MyButtonAction:) forControlEvents:UIControlEventTouchUpInside];


        }
        return cell;
    }

不要从 Nib 连接 IBAction。只需连接自定义单元 IBOutlate 或从笔尖放置 Unique UIButton 标签。

于 2013-07-31T04:51:33.963 回答
1
  1. 您必须保持单元的类名和 XIB 名称相同。
  2. 一般保持所有者为零。
  3. 此外,如果只有 1 个视图(即在您的情况下为 1 个 UITableViewCell),则此视图在索引 0 而不是索引 1 处可用。
  4. 在 XIB 文件中,确保将按钮链接到视图本身,即链接到 IBOutlet 或 IBAction。
  5. 链接的按钮必须已经添加到您的视图中,而不是浮动在 XIB 之外。否则,它们将实例化并到达加载数组的其他索引。如果您一段时间不想要某个按钮,那么只需将其隐藏即可。

所以代码可以如下:

NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"MyCustomCell" owner: nil options:nil];
MyCustomCell *cell = (MyCustomCell*)[views objectAtIndex:0];

进一步确保您为创建 XIB 执行以下操作

好的,接下来是另一部分的简单过程:

  1. 创建从 UITableViewCell 类派生的 MyCustomCell 类。
  2. 创建一个与 MyCustomCell.xib 同名的单独 .xib 文件。
  3. 打开 .xib 并删除其中的现有视图。从编辑器的对象中拖放一个新的
    UITableViewCell。
  4. 请参阅图像以将 XIB 中的 UITableViewCell 的类名更改为您的类名。 在此处输入图像描述
  5. 现在 objectAtIndex 0 将返回 MyCustomCell。
  6. 在 XIB 的 UITableViewCell 中添加所有按钮和其他视图。
于 2013-07-31T04:47:01.967 回答
1

我今天才犯了这个错误!:) 你所要做的就是替换 2 行

NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"NameOfCustomCellNibFile" owner:self options:nil];
cell = [nib objectAtIndex:1]; 

您必须使用 .xib 文件的名称加载 loadNibNamed:。我还认为它与标识符有关,但这是关于引用到单元格中的名称而不是单元格的 nib。

希望这可以帮助!

于 2013-07-31T04:37:32.193 回答