iphone sdk-从单独的类重新加载tableview数据

iphone sdk-从单独的类重新加载tableview数据,iphone,reload,tableview,Iphone,Reload,Tableview,我想运行代码[tableView reloadData],除了我想从一个单独的类调用它到我想在其中重新加载数据的视图控制器 注意。如果重新加载tableview比重新加载数据更有效,请加入 假设我要重新加载的视图是“RootViewController”,而我当前处于“DetailViewController”中,我需要做什么才能使其正常工作 我现在最好的尝试是[RootViewController.tableView reloadData],但它不正确。 我收到错误:之前应为“:”。代币 关于

我想运行代码[tableView reloadData],除了我想从一个单独的类调用它到我想在其中重新加载数据的视图控制器

注意。如果重新加载tableview比重新加载数据更有效,请加入

假设我要重新加载的视图是“RootViewController”,而我当前处于“DetailViewController”中,我需要做什么才能使其正常工作

我现在最好的尝试是[RootViewController.tableView reloadData],但它不正确。 我收到错误:之前应为“:”。代币


关于@norskben

您需要在DetailViewController中引用您的RootViewController实例。在DetailViewController中声明一个属性,并且当您从RootViewController实例化DetailViewController时,我假设,使用如下内容设置它

// in RootViewController.m
detailController.rootController = self;
[self.navigationController pushViewController:...
然后,您可以从详图控制器访问根控制器:

[self.rootController.tableView reloadData];
另一种方法是,当您希望RootController重新加载并让RootController侦听通知时,在DetailViewController中发布自定义NSNotification


另一种方法是,仅当用户返回根控制器时才重新加载表。在RootViewController的视图中执行此操作将显示:方法,了解为什么重新加载一个甚至不在屏幕上的表?

您需要在DetailViewController中引用您的RootViewController实例。在DetailViewController中声明一个属性,并且当您从RootViewController实例化DetailViewController时,我假设,使用如下内容设置它

// in RootViewController.m
detailController.rootController = self;
[self.navigationController pushViewController:...
然后,您可以从详图控制器访问根控制器:

[self.rootController.tableView reloadData];
另一种方法是,当您希望RootController重新加载并让RootController侦听通知时,在DetailViewController中发布自定义NSNotification


另一种方法是,仅当用户返回根控制器时才重新加载表。在根视图控制器的视图中执行此操作将显示:方法,了解为什么重新加载甚至不在屏幕上的表?

您可以使用通知或协议

使用通知:

[[NSNotificationCenter defaultCenter] addObserver:self
                                selector:@selector(dataSaved:)
                                                 name:@"DataSaved" object:nil];
在完成数据保存之后,从方法返回之前发布通知。大概是这样的:

//通知后 [[NSNotificationCenter defaultCenter]postNotificationName:@DataSaved对象:nil]

在处理表格的控制器中,实现

- (void) dataSaved:(NSNotification *)notification{

    [self.tableView reloadData];

}
并在其viewDidLoad方法中添加以下代码以注册通知:

[[NSNotificationCenter defaultCenter] addObserver:self
                                selector:@selector(dataSaved:)
                                                 name:@"DataSaved" object:nil];
最后,在dealloc方法中注销添加

[[NSNotificationCenter defaultCenter] removeObserver:self];
使用协议:

使用上一个控制器可以使用的回调开始创建协议

@protocol dataSavedDelegate
-(void)dataSaved;
@end
保存完数据后:

[(id< dataSavedDelegate >)object dataSaved];

现在,在以前的控制器中处理委托方法:在dataSaved方法中重新加载表。

您可以使用通知或协议

使用通知:

[[NSNotificationCenter defaultCenter] addObserver:self
                                selector:@selector(dataSaved:)
                                                 name:@"DataSaved" object:nil];
在完成数据保存之后,从方法返回之前发布通知。大概是这样的:

//通知后 [[NSNotificationCenter defaultCenter]postNotificationName:@DataSaved对象:nil]

在处理表格的控制器中,实现

- (void) dataSaved:(NSNotification *)notification{

    [self.tableView reloadData];

}
并在其viewDidLoad方法中添加以下代码以注册通知:

[[NSNotificationCenter defaultCenter] addObserver:self
                                selector:@selector(dataSaved:)
                                                 name:@"DataSaved" object:nil];
最后,在dealloc方法中注销添加

[[NSNotificationCenter defaultCenter] removeObserver:self];
使用协议:

使用上一个控制器可以使用的回调开始创建协议

@protocol dataSavedDelegate
-(void)dataSaved;
@end
保存完数据后:

[(id< dataSavedDelegate >)object dataSaved];
现在,在以前的控制器中处理委托方法:在dataSaved方法中重新加载表