1

私は初心者の iOS プログラマーです。現在、iPad 固有のプロジェクトに取り組んでいます。このプロジェクトでは、カスタム描画が必要UIviewでした。これまでは問題ありませんでした。今、私がやろうとしているのは、サブクラスにいくつかのドロップダウン リストを作成することです。このために、私は非常に基本的なアプローチに従いました。ボタンを作成し、そのすぐ下に配置しました。ロード時に非表示のままです。しかし、ユーザーがボタンに触れると、配列からフェッチされたセル内のデータが表示されます。 .私もこれを行うことができました。drawRectUIViewloadViewUIViewControllerUIviewUITableViewUITableViewtable view

私ができなかったのは、これと同じことを複数で実現することですUITableView。別のtable view場合、このようなことを作成しました...

- (id)initWithFrame:(CGRect)frame
{
     arryData = [[NSArray alloc] initWithObjects:@"Samsung",@"HTC",@"Apple",nil]; //data for first table
     parameterData = [[NSArray alloc]initWithObjects:@"Tax Expenses",@"Pretax amount",@"assets",nil]; //data for second table
     tabletableForComany.dataSource = self;
     tableForComany.delegate = self;
     tableForParameter.delegate = self;
     tableForParameter.dataSource = self;
}

プログラムを実行するときに他のデリゲートとデータソースメソッドを実装した後、例外が発生しました

Assertion failure in -[UITableViewRowData _updateSectionRowDataArrayForNumSections:]

この方法に問題があると思います

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier ];
    }

// Set up the cell...

   if(tableView.tag == 1)
   {
     cell.textLabel.text = [arryData objectAtIndex:indexPath.row];
     return cell;
   }

   else if (tableView.tag == 2)

   {
    // Set up the cell...
      cell.textLabel.text = [parameterData objectAtIndex:indexPath.row];
      return cell;

   }
}

テーブルを 1 つだけ設定するdatasourceと、エラーは発生しませんでしたが、どのテーブル セルにもデータが表示されませんでした。助けていただければ幸いです。前もって感謝します

4

2 に答える 2

0

既にご存じのように、複数の UITableView に対して 1 つのデータソース/デリゲートを使用すると問題が発生するようです。

アサーションの失敗を説明するのにUITableViewsの内部動作について十分に知りませんが、テーブルビューごとに1つずつ、複数のデータソースとデリゲートを使用するのが良い解決策だと思います。このアプローチは、複数のスタックオーバーフローの投稿で説明されています。これはアイデアを与えるはずです。

コード内の if ステートメントは、一般的にコードの匂いと見なされます。ストラテジー パターンは、コードをクリーンアップするエレガントな方法です。おまけとして、私はそれがあなたの問題も解決することを期待しています.

于 2013-07-10T08:53:32.953 に答える
0

データソースメソッドで適切に行数を返していることを確認してくださいnumberOfRowsInSection:

参照iOS エラー「無効なセクションの rect の要求」とはどういう意味ですか?

于 2013-07-10T09:22:24.613 に答える