0

異なるデータを表示する UITableViewCell の 2 つのクラスがありますが、それらは同じテーブルを使用します。

bool varを使用して2段階でテーブルにデータを入力しようとしていますが、セルが最初のクラスの割り当てを取得して変更できないため、例外が発生するようです...

基本的に、拡張クラスをセル化する必要があります

@interface PatientsCellNewPager : UITableViewCell { } 
@interface DoctorsCellNewPager : UITableViewCell { } 

ステップ2でセルのタイプを変更しようとするとコードが停止し、 [cell setData:set cellid:[NSString stringWithFormat:@"%d",indexPath.row] ]; ブロックの場合はフェーズ== 2で例外が発生します..

これは、デバッガによると、セルがまだ最初の初期化から DoctorsCellNewPager 型を持っているためです....

それ以外の場合はどうすればよいですか?? クラスの同じインスタンスを使用して同じページにある必要がありますが、複数のレイアウトを使用し、その場でセルレイアウトを定義する..ひどいオプションになるでしょう

これが私のコードです

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";



    if (phase==2) { //patient


        PatientsCellNewPager *cell =(PatientsCellNewPager *)  [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[PatientsCellNewPager alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    }







        PatientsSet *set = (PatientsSet *)[patients_set objectAtIndex:indexPath.row];       

        NSLog(@"logg %d",indexPath.row);    


        [cell setData:set cellid:[NSString stringWithFormat:@"%d",indexPath.row] ]; 




           return cell;

    }
    else if (phase==1) { //doctor


        DoctorsCellNewPager *cell =(DoctorsCellNewPager *)  [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[[DoctorsCellNewPager alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
        }





            // Set up the cell

            DoctorsSet *set = (DoctorsSet *)[doctors_set objectAtIndex:indexPath.row];      


              [cell setData:set cellid:[NSString stringWithFormat:@"%d",indexPath.row] pass:YES ];  





        return cell;


    }


    return nil;

}

これが私のエラーです

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[DoctorsCellNewPager setData:cellid:]: unrecognized selector sent to instance 0x181690'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x323ef64f __exceptionPreprocess + 114
    1   libobjc.A.dylib                     0x36632c5d objc_exception_throw + 24
    2   CoreFoundation                      0x323f31bf -[NSObject(NSObject) doesNotRecognizeSelector:] + 102
    3   CoreFoundation                      0x323f2649 ___forwarding___ + 508
4

2 に答える 2

1

最後にパラメーターを見逃しており、pass:..呼び出しているメソッド に[DoctorsCellNewPager setData:celled:]はパラメーターが設定されていませんpass。したがって、パラメーターを追加するpassと、正常に動作するはずです。

于 2011-09-12T23:12:22.543 に答える
1

これは非常に一般的な問題であり、多くの人がそれに遭遇しました。つい最近、私もその問題に対処しなければなりませんでした。

Matt Gallagher は、それを達成する方法についての素晴らしいチュートリアルを彼のブログに投稿しました。

UITableViewController の異種セル


さて、私はそれがどのように機能するかについてのアイデアを得ました..
//これは非常に実験的であり、テストされていません:

static NSString *PatientsCellIdentifier = @"PatientsCellNewPager";
static NSString *DoctorsCellIdentifier = @"DoctorsCellNewPager";

UITableViewCell *cell;
if(patient) {
    cell = [tableView dequeueReusableCellWithIdentifier:PatientsCellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] 
        initWithStyle:UITableViewCellStyleDefault 
        reuseIdentifier:PatientsCellIdentifier] autorelease];
    }
    // Setup cell for patient -> maybe you could use -configureCell:atIndexPath:
} else if (doctor) {
    cell = [tableView dequeueReusableCellWithIdentifier:DoctorsCellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] 
        initWithStyle:UITableViewCellStyleDefault 
        reuseIdentifier:DoctorsCellIdentifier] autorelease];
    }
    // Setup cell for doctor -> maybe you could use -configureCell:atIndexPath:
}

return cell;

これがあなたをさらにもたらしたかどうか私に知らせてください..

HTH

于 2011-09-12T23:14:25.370 に答える