から挿入してくださいこれはばかげているようですが、私はそれを並べ替えることはできません。プッシュ通知に応答して、テーブルビューに行を挿入する必要があります。実装は、UITableViewの行をコード
- (void)didSaveMessage:(Message*)message atIndex:(int)index
{
//check to make sure I have an array to populate the table from...
if (self.messageManager.messages != nil)
{
self.indexRow = index;
NSLog(@"refresh table view from code");
//remove a label that says "You have no messages"...
[[messageTable tableFooterView] removeFromSuperview];
[messageTable beginUpdates];
[messageTable insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:index inSection:0]]
withRowAnimation:UITableViewRowAnimationFade];
[messageTable endUpdates];
[self scrollToNewestMessage];
}
}
のように単純にする必要があります。このメソッドは、リモート通知を受け取ったときに呼び出され、起動します。ログステートメントが印刷されます。ただし、UITableViewは更新されません。私にとって特に奇妙なのは、同じコードをIBActionに入れて、それをストーリーボードの更新ボタンにリンクすると、それが機能するということです。プログラムでUITableViewを更新するために何か特別なことがありますか?
更新の呼び出しが呼び出される前に、データソースがこの新しい行のデータで既に更新されていることを確認してください。私はあなたがテーブルに行をアニメーション化し、あなたのデータソースに行を追加することは離散的なアクションであることを知っていると仮定しています。 –
はい、ありがとうございます。 insertRowsAtIndexPaths:withAnimationを呼び出す前にテーブルを移入するために使用している配列の数を記録すると、予想される更新回数が得られます。その部分はうまくいくようです。また、新しい行を挿入しようとしたときに自分のデータソースがまだ更新されていないと、NSExceptionが発生し、クラッシュする可能性があります。 – geraldWilliam
良い点は、 'NSInternalInconsistencyException'をスローします。追加される行よりもテーブルの下にある場合は、正しい行にスクロールしますか?また、スーパービューからtableFooterViewを削除することは、それが 'UITableView'のビュー階層の一部であるため、素晴らしい考えです。おそらくそれを代わりに 'nil'に設定するでしょう。これは、ボタンで起動するとうまくいくようです... –