1

テーブルビューにデータを表示し、選択した行に基づいて次のビューに切り替える多層xmlparserを構築しようとしています(おそらく同じビューコントローラーに)。

ストーリーボード セグエから始めましたが、動的セルを使用しているため、複数のプッシュ セグエを作成する方法がわかりません (さまざまなビュー コントローラーにプッシュする必要があるため)。そのため、ストーリーボード ビューを保持し、すべてのセグエを削除して、代わりに以下のコードを使用しました。

ただし、新しいビューが行を作成しようとすると、この例外がスローされます。

キャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。理由: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"index: %i", indexPath.row);

    switch (indexPath.row) {
        case 0:
        {
            DetailViewController *detailViewController = [DetailViewController alloc];
            [self.navigationController pushViewController:detailViewController animated:YES];
            break;
        }
        //...
        default:
        {
            LayerViewController *layerViewController= [LayerViewController alloc];
            [layerViewController setStartUpWithIndex:indexPath.row andLayer:layercount];
            [self.navigationController pushViewController:layerViewController animated:YES];
            break;
        }


    }

}

setStartUpWithIndex:andLayer: は私の初期化メソッドです...

次のセグエ コードを使用してストーリーボード セグエ経由でプッシュすると、問題は発生しません。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        [[segue destinationViewController] setStartUpWithIndex:indexPath.row andLayer:layercount];
}

ビューの最初のレイヤーで cellForRowAtIndexPath: として正常に動作するように didSelectRowAtIndexPath に含める必要がある「セグエ」メソッドの何かが欠けていると思います。

リクエストされた編集:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"LayerCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    cell.textLabel.text = [[articles objectAtIndex:indexPath.row]objectForKey:@"HerstellerName"];
//    cell.textLabel.text = @"ololol";

    return cell;
}

記事の配列はところで働いています

4

2 に答える 2

1

セルを作成していません。Apple がこれをデフォルトの実装に含めなかった理由はわかりませんが、その後:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

以下を追加する必要があります。

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

それ以外の場合は、tableView の読み込み時に存在しないデキューされたセルに依存しているだけです。

編集: ARC を使用していない場合は、その alloc メソッドを autorelease でラップする必要があります。

于 2012-09-27T15:59:57.020 に答える
0

別の viewController をプッシュして表示していますが、この次の viewController には dataSource メソッドが実装されていません。これがどうした。

私が理解している限り、各テーブル行が提示されたノードの子ノードで構成されるように、テーブルを使用して xml ノードを提示しようとしています。chld ノードで行を選択すると、選択したノードの子ノードを持つテーブルを表示する次のテーブル ビューに移動します。

IMO では、現在の xml ノードを表示するために 1 つのビュー コントローラーのみが必要な場合があります。これにより、テーブルに表示されるデータのみが変更され、テーブルが再度リロードされます。したがって、View Controller をプッシュする必要はありません。then メソッドを使用できます

– reloadRowsAtIndexPaths:withRowAnimation:

テーブル内のすべてのノードに対して、View Controller の変更に似たアニメーションを設定します (古いテーブルを左にスライドさせることもできます)。

于 2012-09-27T15:33:49.213 に答える