如何从AppDelegate.m重新加载TableView数据?

时间:2012-05-07 14:52:25

标签: objective-c xcode uitableview

我尝试从AppDelegate.m重新加载TableView数据但没有成功。

这是代码(whis在HomeViewController中工作):

AppDelegate.m

...
- (void)applicationWillEnterForeground:(UIApplication *)application
{
[self refreshTableData];
}

-(void)refreshTableData{

    UINavigationController *navController = [[self.tabBarController viewControllers] objectAtIndex:0];
    HomeViewController *home = [[navController viewControllers] objectAtIndex:0];

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"MYTable" inManagedObjectContext:home.context];

    NSFetchRequest *request = [[NSFetchRequest alloc] init];

    [request setFetchBatchSize:20];

    [request setEntity:entity];

    NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"orderEnt" ascending:YES];

    NSArray *newArray = [NSArray arrayWithObject:sort];

    [request setSortDescriptors:newArray];

    NSError *error;

    NSMutableArray *results = [[home.context executeFetchRequest:request error:&error] mutableCopy];

    [home setArr:results];

    //NSLog(@"%@", home.arr);//here is showed correct data

    home.context = self.managedObjectContext;

    [home.myTableView reloadData];


}
...

有人知道如何从AppDelegate.m重新加载数据吗?

1 个答案:

答案 0 :(得分:6)

您可以实施

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadTableViewData) name:@"ReloadAppDelegateTable" object:nil]; 

在您的viewDidLoad()方法和

- (void)reloadTableViewData{
  [self.myTableView reloadData];
}

在要重新加载数据的类中。

然后你发送这样的通知

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

每当您想重新加载数据时。

注意经过几年的iOS开发经验: 虽然这是一个非常简单和舒适的解决方案,但它并非100%可靠。在某些情况下,通知可能会延迟几秒钟。我强烈建议您与UITableViewController建立快速可靠的委托关联。