/ / Jak wywołać metodę z kontrolera Tabbar Rootview - objective-c, xcode, cocoa-touch

Jak wywołać metodę z kontrolera rootbar z kartarem - target-c, xcode, cocoa-touch

Mam 3 elementy paska kart, każdy kontroler widoku. Pierwszy, drugi i trzeci kontroler widoku. Potrzebuję First ViewController, aby wywołać metodę, która aktualizuje widok tabeli w widoku kontrolera drugiego widoku. Nie jestem pewien, jaki jest właściwy sposób rozwiązania tego problemu. Wypróbowałem SharedInstance, ale wydaje mi się, że są tworzone dwie instancje, a ten kontroler widoku, z którego korzysta pierwsza maszyna wirtualna, nie jest tą samą maszyną wirtualną, która jest faktycznie używana w aplikacji, co wyjaśniałoby, dlaczego mój widok tabeli nie jest ” t aktualizowanie.

Zasadniczo, gdy przesyłam plik w pierwszym widokuKontroler, potrzebuję drugiej maszyny wirtualnej, aby zaktualizować widok tabeli i pokazać postęp przesyłania pliku. Trochę tak, jak w przypadku zakupu utworu w iTunes. Są to kontrolery UINavigationViewControllers dla elementów kart.

Próbowałem tego:

+ (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;

}

Odpowiedzi:

1 dla odpowiedzi № 1

Nie chcesz, aby kontrolery komunikowały się bezpośrednio ze sobą. Jeśli przechodzisz do innego widoku, możesz użyć prepareForSegue. Jeśli nie chcesz tego używać, sugeruję aktualizację pliku lub bazy danych, do której mają dostęp oba kontrolery, aby uniknąć bezpośredniej interakcji i zachować architekturę mvc.


0 dla odpowiedzi nr 2

Możesz zaimplementować metodę delegata tabBarController:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
if([viewController isMemberOfClass[SecondViewController class]]) {
//pass the data here
}
}