2015-06-25 4 views
4

Я пытаюсь передать некоторые данные между моими представлениями в панели вкладок. мое первое представление может загружать данные из моего класса модели и манипулировать им. Но когда я нажимаю вторую или третью вкладку в моем контроллере панели вкладок, данные не передаются. Вот как я пытаюсь это передать.Пытается передать данные между контроллерами панели вкладок

-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{ 

if (tabBarController.selectedIndex == 1){ 
HashTagTableViewController *hash [[HashTagTableViewController alloc]init]; 
    hash.userArray = feed.userArray; 
}else if (tabBarController.selectedIndex == 2){ 
    PhotoTagTableViewController *photo = [[PhotoTagTableViewController alloc]init; 
    photo.userArray = feed.userArray; 

} 

} 

feed - это имя экземпляра моего класса модели I, созданного в текущем контроллере. Я пытаюсь избежать создания нескольких экземпляров класса модели, поскольку он должен выполнять несколько вызовов API. Все, что я пытаюсь сделать, это передать feed.userArray в разные виды, которыми нужно управлять по-разному.

+0

Так что 'feed' - это ваши данные о модели. Вы поступаете правильно и правильно используете шаблон MVC. Теперь вам нужно установить некоторые точки останова и посмотреть, как выглядят данные на этапе настройки, а затем с точки зрения контроллера. – Droppy

+0

На этом этапе hash.userArray настроен отлично. Но когда он переключается на HashTagTableViewController, hash.userArray оказывается пустым. –

ответ

3

Не создавайте контроллеры представлений в этом методе. UITabBarController автоматически создает все контроллеры представлений при инициализации. Попробуйте это вместо:

-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{ 
    if (tabBarController.selectedIndex == 1){ 
     HashTagTableViewController *hash = (HashTagTableViewController *) viewController; 
     hash.userArray = feed.userArray; 
    }else if (tabBarController.selectedIndex == 2){ 
     PhotoTagTableViewController *photo = (PhotoTagTableViewController *)viewController; 
     photo.userArray = feed.userArray; 
    } 
} 
+0

Crashed и получил эту ошибку: [UINavigationController setUserArray:]: нераспознанный селектор, отправленный в экземпляр 0x7fc5fb4cf880 –

0

Вы создаете новый экземпляр ViewController. Вместо этого вам нужно получить выбранный диспетчер представлений из массива ViewController TabBarController. Я изменил ваш код. Поэтому проверьте это ниже.

Примечание:

Пожалуйста, решите имена Орфографическая ошибка/Method. Потому что я пишу это в блокноте. Не в xcode.

-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 
    if([viewController isKindOfClass: [HashTagTableViewController class]]) 
    { 
     HashTagTableViewController *hash = (HashTagTableViewController) viewController; 
     hash.userArray = feed.userArray; 
    } 
    else if([viewController isKindOfClass: [PhotoTagTableViewController class]]) 
    { 
     PhotoTagTableViewController *photo = (PhotoTagTableViewController) viewController; 
     photo.userArray = feed.userArray; 
    }  
} 
+0

Разве 'vc' уже передан как' viewController'? – Droppy

+0

Да. Он передается в viewController. Вы правы @Droppy –

+0

Это была моя первая попытка. Используя отладчик, он пропускает первый оператор if, поскольку класс viewController является классом UINaviagtionController. –