2013-07-02 2 views
0

У меня есть три ViewControllers:Обновление данных UITableView

RootViewController 
FirstViewController 
SecondViewController 

Из RootViewController я создать TabBarController с двумя другими ViewControllers. Поэтому мне нужно сделать что-то вроде:

FirstViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil]; 

SecondViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 

А затем добавьте контроллеры в TabBarController. В этот момент созданы два экземпляра ViewControllers.

Чтобы обновить данные, которые я попытался это в моем FirstViewController.m:

SecondViewController *test = [[SecondViewController alloc] init]; 
[test.tableView reloadData]; 

Но ничего не происходит, я полагаю, потому что мой SecondViewController было выделено раньше, и я создаю новый экземпляр.

Как обновить данные моей таблицы в SecondViewController от моего FirstViewController?

ответ

1

Контроллер корневого представления передаёт значение viewController2 до viewController1 при его создании. Опишите свойства как слабые, так как вы хотите, чтобы rootController владел ими, а не другой viewController.

0

Имеет ли ваш TabBarController трюм FirstViewController и SecondViewController? В TabBarController есть свойство - viewControllers. Это массив, поэтому вы можете использовать его для доступа к вашим диспетчеру просмотра.

[tabBarController.viewControllers objectAtIndex:0];//This is your First viewController 
[tabBarController.viewControllers objectAtIndex:1];//This is your Second viewController 

И затем войдите в таблицу sencondViewController и перезагрузите его.

Надеюсь, это будет полезно.

1

Если вы пытаетесь обновить данные, используемые во втором контроллере представления, без необходимости переключения, я бы использовал шаблон делегата.

Создать декларацию протокола в FirstViewController как

@class FirstViewController; 

@protocol FirstViewControllerDelegate 

-(void) updateDataFromFirstViewController: (NSMutableArray*)newArray; 

@end 

@property (strong, nonatomic) id<FirstViewControllerDelegate>delegate; 

затем в вашем firstViewController, когда у вас есть новые данные для обновления позвонить

[self.delegate updateDataFromFirstViewController:yourNewData]; 

реализовать этот метод в SecondViewController.m, и добавить делегата Контроллер SecondView.h

SecondViewController: UIViewController <FirstViewControllerDelegate> 

Th ru in

-(void) viewWillAppear:(BOOL)animated 

перезагрузите данные таблицы, так что, когда вам действительно нужно увидеть обновленные данные, их там, когда вы переключаетесь. Также не забудьте установить делегат FirstViewController для себя в SecondViewController.

+0

я получил ошибку, когда tryn добавить в SecondViewController.h (он говорит делегат не существует): S –

+0

сделал вам '#import«FirstViewController.h "' –

-1

Это поможет вам. Таким образом вы можете получить доступ к secondViewController.

UITabBarController *tabController = (UITabBarController *)[self parentViewController]; 

[tabController.viewControllers enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 

    if ([obj isKindOfClass:[SecondViewController class]]) { 
     SecondViewController *secondController = obj; 
     [secondController.tableView reloadData]; 
     *stop = YES; 

    } 

}]; 
+0

Как было предложено orange9792, делегат был бы более уместным в этой ситуации. Я бы избегал перечисления по иерархии как можно больше. –

Смежные вопросы