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 № 1Nie 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
}
}