1

如何通过推送通知通过 NSNotification 获取要更新的表格视图?

当我的应用通过 App Delegate 的- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo方法收到通知并且该应用当前已经在运行时,我会更新数据(通过 Core Data 存储)

弹出一个警报视图,一旦它被关闭,我打电话

[[NSNotificationCenter defaultCenter] postNotificationName:@"updateConversations" object:nil];

在表视图控制器中:

- (void)viewDidLoad {
    //some setup code removed
    _someData = [[GGGroups findAllSortedBy:@"lastUpdated" ascending:NO withPredicate:[NSPredicate predicateWithFormat:@"ANY users = %@", [GGUser currentUser]]] mutableCopy];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateData:) name:@"updateConversations" object:nil];
}

- (void)updateData:(NSNotification *)notification {
    dispatch_async(dispatch_get_main_queue(), ^{
        [self.tableView reloadData];
        NSLog(@"Updated those conversations");
    });
}

我尝试添加和删除 dispatch_async 主队列块。

它总是到达 updateData 方法(我可以看到 NSLog),tableview 本身永远不会更新。

我在这里做错了什么?


更新

根据要求提供更多代码。

- (NSInteger)tableView:(UITableView *)tableView
 numberOfRowsInSection:(NSInteger)section
{
    return [_someData count];

}

此外,每个表视图单元格都配置为 _someData 的索引。

appDelegate 更新了 GGGroups 核心数据结构,因此 tableview 应该相应地更新,但这并没有发生,原因我至今不知道。

4

1 回答 1

0

您说您正在使用 Core Data,但实际上您似乎并没有观察到那里的变化(例如通过使用获取的结果控制器)。当模型更改时,您正在设置_someData但不更新它。

当您收到通知时,尝试更新用于填充表格视图的数据:

- (void)updateData:(NSNotification *)notification {
    dispatch_async(dispatch_get_main_queue(), ^{
        _someData = [[GGGroups findAllSortedBy:@"lastUpdated" ascending:NO withPredicate:[NSPredicate             predicateWithFormat:@"ANY users = %@", [GGUser currentUser]]] mutableCopy];
        [self.tableView reloadData];
        NSLog(@"Updated those conversations");
    });
}
于 2013-05-20T19:22:03.453 回答