从代码中插入UITableView中的行

时间:2012-04-13 22:42:39

标签: objective-c ios 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吗?

3 个答案:

答案 0 :(得分:1)

尝试向表发送reloadData消息。这应该强制表视图更新。

答案 1 :(得分:0)

这似乎很简单,但是你传入didSaveMessage的Message *可能是nil吗?它可以解释为什么NSLog语句有效,我认为你必须在从IBAction测试时手动创建消息。

答案 2 :(得分:0)

这已经解决了。我正在调用方法来更新来自didReceiveRemoteNotification的UI:在AppDelegate中,但是更新到我的视图控制器的不同实例。所以我在app delegate中添加了一个viewController属性,在我的视图控制器的视图中设置了该值,并且现在它已经完成了。