3つのタブバーアイテムがあり、それぞれがビューコントローラーです。1番目、2番目、および3番目のビューコントローラー。 2番目のViewControllerビューのテーブルビューを更新するメソッドを呼び出すには、FirstViewControllerが必要です。これを処理する正しい方法が何であるかわかりません。 sharedInstanceを試しましたが、2つのインスタンスが作成されており、最初のVMが使用しているビューコントローラーが「アプリで実際に使用されているのと同じVMではないため、テーブルビューが作成されない理由がわかります」と思われます。 t更新。
基本的にFirstViewでファイルをアップロードするときコントローラー、テーブルビューを更新してファイルのアップロードの進行状況を表示するには、2番目のVMが必要です。iTunesで曲を購入したときのようなものです。これらはタブアイテムのUINavigationViewControllersです。
私はこれを試した:
+ (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;
}
回答:
回答№1は1コントローラが互いに直接通信することは望ましくありません。別のビューにセグエする場合は、次を使用できます。 prepareForSegue
。それを使用したくない場合は、直接の相互作用を回避し、MVCアーキテクチャを維持するために、両方のコントローラーがアクセスできるファイルまたはデータベースを更新することをお勧めします。
回答№2の場合は0
tabBarControllerデリゲートメソッドを実装できます。
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
if([viewController isMemberOfClass[SecondViewController class]]) {
//pass the data here
}
}