17

UITableView配列を使用してデータを一覧表示するがあります。これは正常に機能します。UISearchBarその中で検索するためのもありますtableview。tableviews配列でデータが一致すると、それらの行は別の可変配列に追加され、cellForRowAtIndexPath:代わりにその可変配列からのデータが表示されます。

しかし、numberOfRowsInSection:reloadDataを呼び出すときに呼び出されることはありません。したがって、tableviewスクロール時にクラッシュします。これは、可変配列からデータを取得しようとしているためですが、元の配列(より多くの項目がある)にある行の場合です。

私はかなり長い間デバッグしてきましたが、神の愛のためにこれの理由を見つけることができません。DatasourceとDelegateはtableview、元の配列のデータを表示できるため、に接続されています。

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
         NSLog(@"isSearching: %d", isSearching);
         // Return the number of rows in the section.
         if(!isSearching)
            return [originalArray count];

         NSLog(@"isSearching - Return searchCopyListOfItems");
         return [searchCopyListOfItems count];
    }

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

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

         if(!searching)
             cell.textLabel.text = [originalArray objectAtIndex:indexPath.row];
         else
             cell.textLabel.text = [searchCopyListOfItems objectAtIndex:indexPath.row];

         return cell;
    }
4

9 に答える 9

17

numberOfSections返された場合0numberOfRowsInSectionは呼び出されません。

于 2017-04-15T13:13:56.560 に答える
10

reloadDataテーブルビューのデリゲートメソッド内から呼び出さないように注意してください。これにより、予期しない動作が発生します。また、beginUpdates以前に呼び出したことがないこと、およびreloadDataメインスレッドからのみメソッドを呼び出すことを確認してください。

于 2012-07-13T10:53:41.543 に答える
5

テーブルをどのようにリロードしますか?正しくやってい[table relaodData];ますか?テーブルはペン先のIBOutletに接続されていますか?リロードの時点で、table初期化されますか?

クラッシュ情報も投稿できます。

于 2012-07-13T11:03:02.350 に答える
1

今日、XCode6.1で同じ問題が発生しました

私のコードでは、dataSourceとをdelegate設定しました:

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    self.tableView.dataSource = self;
    self.tableView.delegate = self;
}

...そして奇妙なことに、私のコード最初にロードされたときにテーブルにデータを入力していました...しかし、その後、への呼び出しを無視しましたreloadData

ストーリーボードで、ストーリーボードのテーブルビューを右クリックすると、「アウトレット」ラジオボタンが空の円になりました。

この空の円から親UIViewに線をドラッグすると、問題なく動作しましたreloadData

ここに画像の説明を入力してください

どういうわけか、IBOutletUITableViewコントロールとそれを設定するために使用される.h/.mファイルとの間のリンクを失いました。

于 2014-12-01T10:41:28.963 に答える
1

また、データをリロードする過程でテーブルを移動していないことを確認してcellForRowAtIndexPath:ください。データの更新中にテーブルが呼び出される可能性があります。

于 2018-06-09T19:26:01.103 に答える
0

私にとっての問題は、セクションのスタブアウト数が0を返すことでした。セクションを使用する予定はありませんでしたが、オブジェクト階層では行よりも高いため、1にする必要があります:https ://stackoverflow.com / a / 26632808/1449799

于 2014-10-29T14:34:17.883 に答える
0

私にとっての落とし穴は、値をインクリメントしてから返すことを試みていたということでしnumberOfSectionsInTableView

すなわちreturn someValue++

どうやらこれは不可能であり、私の場合はsomeValue0から1にインクリメントされていなかったため、0セクションが返されるため、numberOfRowsInSection:が呼び出される理由はありませんでした。

于 2016-07-30T21:15:03.283 に答える
0

私にとっての解決策は、別のペン先からコピーして貼り付け、IBのコンセントを再配線するのdataSourceを忘れてしまうことでした。delegateこれは以前に私に起こったことですが、この解決策がこの問題に遭遇した人を助ける場合に備えて、ここに投稿すると思いました。

于 2019-01-11T10:00:31.197 に答える
-3

試す

[self.tableView reloadData];
于 2012-07-13T16:32:10.997 に答える