3

iOSアプリで奇妙なエラーに直面していて、その理由を理解できていません。

UITableViewで新しいセルを追加できるので、データソースである配列を更新してを呼び出しますreloadData

すべてがエラーなしで機能します。が再度呼び出され、そのnumberOfRowsInSection値は以前の値より1つ多くなります。新しいセルはテーブルビューの下部にも挿入されますが、下にスクロールできません。テーブルビューがバウンスして見えるので、そこにあることだけを知っています。

なんらかの理由でテーブルビューのコンテンツの高さが増していないのではないかと思いますが、理由はわかりません。

私はiOS6を使用しています。

どんな助けでも大歓迎です!ありがとう、

ゾリ

編集、Srikanthの質問への回答:

  1. データはどのように追加されますか。

特定のタイプのオブジェクトを含むNSArrayがあります。array.countは、セルの数です。このNSArrayは、データベースクエリから値を取得します。

  1. あなたが言うとき、あなたはアレイをリフレッシュしています、あなたはどういう意味ですか。

配列を更新するということは、データベースで新しいクエリを実行し、このクエリの結果をNSArrayに入れることを意味します。これは、テーブルビューのデータソース配列になります。このような:

dataSourceArray = [dbManager executeQuery];
[tableView reloadData];
  1. 同じViewController内にデータを追加していますか

はい。

  1. あなたがしていることに関していくつかのコードを見せてもらえますか

上記を参照。

  1. テーブルビューはビューコントローラビューのルートにありますか、それとも別のビュー内にありますか

テーブルビューはメインビューの最初の子です。

  1. 上部に追加されているセルを表示できるように、最初に配列にデータを追加してみてください。

どういう意味かわかりません。

4

3 に答える 3

0

tableView:heightForRowAtIndexPath:メソッドを確認してください。このメソッドは、おそらく、新しく追加された行に対して何らかの形でゼロを返しています。

于 2012-12-12T09:27:09.447 に答える
0

答えは、テーブルビューの reloaddata が呼び出される前に、データベースから新しいコンテンツを取得したことを確認することでした。何らかの理由で新しいコンテンツがテーブルビューにありましたが、そのコンテンツの高さが小さくなりました。私の推測では、新しい結果が配列に入る前に numberOfRowsInSection が呼び出されましたが、その内容は新しいデータを含む配列からのものでした。でもそれも意味不明…

しかし、テーブルビューのリロードがフェッチクエリが終了した後にのみ行われることをコールバックで確認することで、問題は解決しました。

于 2012-12-12T17:02:05.443 に答える
0

私はこれと同じ問題に遭遇しましたが、それを正しく動作させることができた唯一の方法は、 reloadData を使用するのではなく、すべてのセクションをリロードすることでした (これは同じことになりますが、内部の UITableView contentSize 再計算に関しては明らかにそうではありません)。

とにかく、モデルがロードされたら、[ self.myTableView reloadData ] を実行しないでください。代わりにこれを呼び出します。

-(void)reloadDataWithAnimation {
    [self.myTableView reloadSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, self.myTableView.numberOfSections)] withRowAnimation:UITableViewRowAnimationTop];
}

アニメーションは必要ありません。そのように見せるためにアニメーションが必要だっただけです。

于 2013-11-21T09:17:17.807 に答える