2013-08-10 4 views
0

У меня проблема с передачей данных между UIViewController и я не нахожу ответов в прежних вопросах.Новые способы передачи данных между диспетчерами просмотра

Ситуация: У меня есть первый viewController ('CalViewController'), который позволяет пользователям вводить данные. Затем я вычисляю с такими числами число (например, «калории»). Следующими видами являются два UIViewController (DrinksViewController & FoodViewController), отображаемый в TabBarController, и мне нужно значение «калорий».

Что я пробовал: - prepareForSegue метод: Это не работает, потому что перетекает (символ в раскадровке является связующим звеном между двумя точками) в TabBarController не как других (символ в раскадровке стрелок через дверь).

-didSelectViewController 'method: этот метод не активирован, чтобы отобразить первый вид TabBarController. Поэтому мне удалось перенести Calories на мой второй ViewController в TabBarController (то есть FoodViewController), но не на мой первый viewController в TabBarController (то есть DrinksViewController).

-Call «оригинального» значение: Вот то, что я сделал в CalViewController (после импортирован DrinksViewController.h)

DrinksViewController *dvc = [[DrinksViewController alloc] init]; 
dvc.caloriesImported = 456; 

Я не знаю, почему это третий способ не работает.

Проблема: Моя ценность Calories не передается от CalViewController к DrinksViewControlller. Есть идеи ?

+0

Возможно, вы можете сохранить ввод пользователя в файле plist, а затем получить доступ к данным в этом файле с других контроллеров представлений. – JPetric

+0

Является ли CAlViewController также в контроллере панели вкладок? – rdelmar

ответ

3

Если я правильно понимаю вашу проблему правильно, должно работать в первом контроллере вид CalViewController:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"yourSegueToTabBarIdentifier"]) { 
     UITabBarController *tbc = [segue destinationViewController]; 
     DrinksViewController *dvc = tbc.viewControllers[0]; 
     dvc.caloriesImported = 456; 
     FoodViewController *fvc = tbc.viewControllers[1]; 
     fvc.someProperty = someValue; 
    } 
} 

Обратите внимание, что

DrinksViewController *dvc = [[DrinksViewController alloc] init]; 
dvc.caloriesImported = 456; 

не может работать, потому что он выделяет новый экземпляр DrinksViewController, что полностью не связан с экземпляром, используемым контроллером панели вкладок.

0

Вам нужно получить экземпляры, которые уже находятся в контроллере панели вкладок. Вы делаете это с помощью self.tabBarController.viewControllers [n], где n будет равно 0,1 или 2 в зависимости от того, к какому контроллеру вы пытаетесь получить доступ.

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