0

私はカスタム UITableViewCell (ReservationsCell.h/ReservationsCell.m/ReservationsCell.xib) を持っており、その中にボタンがあります。NIB ファイルでは、識別子は として設定されreservationsCell、ファイルの所有者は View Controller として設定され、カスタム クラスは として設定されReservationsCellます。ボタンの TouchUpInside イベントは、ViewController ファイルに記述された IBAction にリンクされています。

問題

ボタンをクリックすると、EXC_BAD_ACCESS が返されます-[NSObject performSelector:withObject:withObject:]: message sent to deallocated instance 0x398e7ff0

試み

ここ数時間で NSZombies を試すように教えられましたが、エラーの原因は私のtableView:cellForRowAtIndexPath方法であることがわかりました。

コード

ViewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];

    .....    

    // register ReservationCell nib
    [self.reservationsTableView registerNib:[UINib nibWithNibName:@"ReservationsCell" bundle:nil] forCellReuseIdentifier:@"reservationsCell"];   
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"reservationsCell";
    ReservationsCell *cell = (ReservationsCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

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

    ......
}

Zombies によると、エラーをスローする特定の行はdequeueReusableCellWithIdentifier.

私を助けてください。前もって感謝します!:)

4

2 に答える 2

1

何が起こっているかというと、あなたUIButtonの は の再利用されたインスタンス内で定義されているため、すでに解放され割り当てが解除されたインスタンスUITableViewCellにアタッチされている可能性があります。UITableViewCell

あなたがすべきことは、それ自体でIBActions を処理することです(あなたの場合)。これらのタッチ イベントは、委任を介して調整を行っている に転送する必要があります (セル インデックスが必要な場合は、それも渡します)。UITableViewCellReservationsCellUIViewController

幸運を!

于 2013-09-15T14:27:38.290 に答える
0

FilesOwner をカスタムUITableViewCellnib に設定しないでください。奇妙な問題が発生します。その中には、このエラーが表示されています。セル自体のカスタム クラスを設定し、UI アウトレットを配線し、カスタムUITableViewCellクラスのコードに作業を実行させます (または、その作業を所有する に委譲しますUITableView)。

于 2013-09-15T14:24:50.027 に答える