3

カスタムのテーブルビュー セルがあります。しかし、このセルを cellForRowAtIndexpath で呼び出すと、次のエラーが発生します。

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewCell lblPosition]: unrecognized selector sent to instance 0xa62a600'

すべてが正しく接続され、正しく名前が付けられているかどうかを100回チェックしましたが、それでも何が問題なのかわかりません。これは私がコードで行っていることです。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"KlassementCell";

    KlassementCell *cell = (KlassementCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"KlassementCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }

    // ask NSFetchedResultsController for the NSMO at the row in question
    Klassement *klassement = [self.fetchedResultsController objectAtIndexPath:indexPath];
    // Then configure the cell using it ...
    NSString *pointDiff = [NSString stringWithFormat:@"%@", klassement.goalsDiff];
    NSLog(@"position %@",klassement.position);
    NSLog(@"name %@",klassement.name);
    cell.lblPosition.text       = klassement.position;
    cell.lblName.text           = klassement.name;
    cell.lblgamesPlayed.text    = klassement.gamesPlayed;
    cell.lblGamesWon.text       = klassement.gamesWon;
    cell.lblGamesTied.text      = klassement.gamesTied;
    cell.lblGamesLost.text      = klassement.gamesLost;
    cell.lblGoalsPos.text       = klassement.goalsPos;
    cell.lblGoalsNeg.text       = klassement.goalsNeg;
    cell.lblGoalsDiff.text      = pointDiff;
    cell.lblPoints.text         = klassement.points;

    return cell;
}

誰でも助けることができますか?

敬具。

4

5 に答える 5

4

試す

if ((cell == nil) || (![cell isKindOfClass: KlassementCell.class])) {

キューに返されたセルは、KlassementCell ではない可能性があります。

于 2012-10-08T13:28:01.507 に答える
0

多分これはあなたのviewDidLoad(またはセットアップのための他の場所...)メソッドで役立ちます:

UINib* myCellNib = [UINib nibWithNibName:@"KlassementCell" bundle:nil];
[tableView registerNib:myCellNib forCellReuseIdentifier:@"KlassementCell"];

そして、このようにセルをインスタンス化します

 cell = (KlassementCell*)[myCellNib instantiateWithOwner:nil options:nil];

myCellNib はクラス スコープで使用できる必要があります

于 2012-10-08T13:29:57.867 に答える
0

識別子はクラス名とまったく同じである必要があるため、両方とも「KlassementCell」である必要があります。そうすれば、キューに通常の再利用可能な UIcells はありません。if ((cell == nil) || (![cell isKindOfClass: KlassementCell.class])) {lblPosition、lblName、lblgamesPlayed などの通常のセルに存在しないプロパティに物を割り当てていないことを確認するため、これが機能する理由でもあります。

于 2013-05-31T07:24:40.637 に答える
0

「KlassementCell」nib の 0 Index オブジェクトのクラスを KlassementCell として設定し、すべてのサブビューをマップしましたか??

そうでない場合は、それを行うとうまくいくかもしれません。

于 2012-10-08T13:38:44.090 に答える
0

nib で、セルのクラスが「KlassementCell」に設定されていることと、識別子が「KlassementCell」に設定されていることを確認してください。

cellForRowAtIndexPath では 1 つのタイプの tableviewcell と 1 つの識別子のみを使用するため、他に何もする必要はありません。

于 2012-10-08T13:54:20.750 に答える