Objective c 如何从选项卡栏rootview控制器调用方法

Objective c 如何从选项卡栏rootview控制器调用方法,objective-c,xcode,cocoa-touch,Objective C,Xcode,Cocoa Touch,我有3个选项卡项,每个选项卡项都有一个视图控制器。第一、第二和第三个viewcontroller。我需要第一个ViewController调用在第二个view controller视图上更新tableview的方法。我不确定什么是正确的处理方法。我尝试了sharedInstance,但我认为现在正在创建两个实例,并且第一个VM使用的视图控制器与应用程序中实际使用的VM不同,这可以解释为什么我的tableview没有更新 基本上,当我在First View Controller中上载文件时,我需要

我有3个选项卡项,每个选项卡项都有一个视图控制器。第一、第二和第三个viewcontroller。我需要第一个ViewController调用在第二个view controller视图上更新tableview的方法。我不确定什么是正确的处理方法。我尝试了sharedInstance,但我认为现在正在创建两个实例,并且第一个VM使用的视图控制器与应用程序中实际使用的VM不同,这可以解释为什么我的tableview没有更新

基本上,当我在First View Controller中上载文件时,我需要第二个VM更新tableview并显示文件的上载进度。就像在iTunes上购买歌曲一样。这些是选项卡项的UINavigationViewController

我试过这个:

+ (SecondViewController *)sharedInstance {
// Singleton implementation
static SecondViewController* instance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    instance = [[SecondViewController alloc] init];
});

return instance;
}

 - (void)viewDidLoad
 {
  [super viewDidLoad];
  UploadTableView.dataSource = self;
  UploadTableView.delegate = self;

  [S3UploadClientManager tm].delegate = self;

 }

您不希望控制器彼此直接通信。如果要切换到另一个视图,可以使用
prepareforsgue
。如果您不想使用,我建议您更新两个控制器都可以访问的文件或数据库,以避免直接交互并保持mvc体系结构。

您可以实现tabBarController委托方法:
-(void)tabBarController:(UITabBarController*)tabBarController didSelectViewController:(UIViewController*)viewController{
if([viewController isMemberOfClass[SecondViewController class]]){
//在此处传递数据
}
}

但是如何设置通知第二视图控制器需要更新的内容?假设第一个虚拟机在数据库中进行了更改。为什么视图控制器需要在显示之前进行更新?EDI将采用完全不同的方法。我想我尝试的这个方法太过分了。这是我的第一个iPhone应用程序。我习惯于桌面和web开发,在那里我可以使用通知/信使工具与其他视图模型/控制器进行对话。我想iOS是不一样的。不过,感谢您提供的提示。在MVC和MVVM等模式中,microsoft提供的工具允许在需要时发送通知,并且仍然能够保持良好的模式。IDK,如果xcode/iOS存在这样的东西