0

これはばかげているようですが、私はそれを整理することができないようです。プッシュ通知に応答してテーブルビューに行を挿入する必要があります。実装は次のように単純にする必要があります

- (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を更新するために私がしなければならない特別なことはありますか?

4

3 に答える 3

1

テーブルにreloadDataメッセージを送信してみてください。これにより、テーブル ビューが強制的に更新されます。

于 2012-04-13T22:45:05.740 に答える
0

これは解決されました。AppDelegate の didReceiveRemoteNotification: から UI を更新するメソッドを呼び出していましたが、View Controller の別のインスタンスに呼び出していました。そこで、viewController プロパティをアプリ デリゲートに追加し、View Controller のビューでその値を設定してロードしたところ、すべてが機能するようになりました。

于 2012-04-17T19:24:09.210 に答える
0

些細なことのように思えますが、didSaveMessage に渡す Message* が nil である可能性はありますか? NSLog ステートメントが機能する理由を説明し、IBAction からテストするときにメッセージを手動で作成する必要があると思います。

于 2012-04-14T00:55:54.737 に答える