-3

これはSOで非常によくある質問ですが、Googleを使用してコードを数回クロスチェックしていますが、クラッシュを特定できません

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

MyCustomCellFacebook、Twitter、LinkedIn の 3 つのボタンがある XIB という名前のCustomCell があります。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
  1. セルのクラス名と XIB 名を同じにしておく必要があります。
  2. 通常は所有者を nil にします。
  3. また、ビューが 1 つしかない場合 (つまり、あなたの場合は UITableViewCell が 1 つ)、このビューはインデックス 1 ではなくインデックス 0 で利用できます。
  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: をロードする必要があります。私もそれが識別子だと思っていましたが、それはセルのペン先ではなく、セルに参照されている名前に関するものです。

お役に立てれば!

于 2013-07-31T04:37:32.193 に答える