2012-01-03 2 views
0

Перед выполнением моего приложения возникает следующая проблема. У меня есть приложение с вкладками и нажатие на каждую вкладку я могу получить доступ к соответствующему виду: например, нажатие на tab2 открывает view2. Но я могу получить доступ к VIEW2 также, нажав на кнопку на view1, что делается следующим образом:Различное поведение при доступе к представлениям через вкладки или Segues

... 
[buttonToView2 addTarget:self action:@selector(gotoView2) forControlEvents:UIControlEventTouchUpInside]; 
... 

где:

- (void)gotoView2 
{ 
    //execute segue programmatically 
    [self performSegueWithIdentifier: @"View2Segue" sender: self]; 
} 

View2 имеет таблицу, которая показывает данные из массива, заполненного данными из Интернета (в viewDidAppear метод). Итак, оба выбора tab2 или нажатия кнопки должны привести пользователя к целевому представлению2.

Это работает, но имеет другое поведение в двух случаях:

  • Если я нажимаю на вкладке, таблица уже заполнена данными, пока приложение извлекает информацию из Интернета
  • Если я нажимаю кнопка и я выполняю segue, стол пуст, пока приложение получает информацию из Интернета

Почему? Может быть, из-за выбора, вызываемого кнопкой, выполняется в другом потоке? Любые идеи, пожалуйста?

С уважением, Яса

+0

Убедитесь, что вы правильно реализовали '- (void) prepareForSegue: (UIStoryboardSegue *) segue отправитель: (id) отправитель' для вашего sek (см. Полезное сообщение: http://stackoverflow.com/questions/8680453/programatically -copy-array-to-new-view-in-storyboard) – petert

+0

В этом случае я не реализовал 'prepareForSegue', так как у меня нет информации, которая должна быть передана в представление назначения2 ... Я буду попытайтесь объяснить лучше. У меня есть: '@interface View2: UIViewController { NSArray * arrayView2; UIImage * profileImage; .... ' Если я получу доступ к этому представлению через вкладку во второй раз, все эти переменные заполняются. Если я программно получаю доступ через Segue, они будут нулевыми. – yassassin

ответ

0

Каждый раз, когда Segue выполняется он создает новый экземпляр destinationViewController (в данном случае View2). Это означает, что у вас есть 2 отдельных экземпляра view2.

+0

и можно ли это избежать? или есть обходное решение для этого? Спасибо за Ваш ответ!!! – yassassin

+0

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

+1

Вы имеете в виду примерно следующее: 'View2 * currentImageDetail = [self.storyboard instantiateViewControllerWithIdentifier: @" View2Identifier "]; [self.View1 addSubview: currentImageDetail.view]; ' или есть ли лучшие способы? Большое спасибо!!! – yassassin

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