这看起来很荒谬,但我似乎无法解决这个问题。我需要在表视图中插入一行以响应推送通知。实现应该像
一样简单- (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吗?
答案 0 :(得分:1)
尝试向表发送reloadData
消息。这应该强制表视图更新。
答案 1 :(得分:0)
这似乎很简单,但是你传入didSaveMessage的Message *可能是nil吗?它可以解释为什么NSLog语句有效,我认为你必须在从IBAction测试时手动创建消息。
答案 2 :(得分:0)
这已经解决了。我正在调用方法来更新来自didReceiveRemoteNotification的UI:在AppDelegate中,但是更新到我的视图控制器的不同实例。所以我在app delegate中添加了一个viewController属性,在我的视图控制器的视图中设置了该值,并且现在它已经完成了。