2010-08-22 2 views
0

все, я понятия не имею, почему это не работает, надеюсь, кто-то здесь может мне помочь. Вот что я пытаюсь сделать:iphone sdk: объекты теряются при нажатии другого viewController?

У меня есть два ViewControllers, давайте назовем их secondViewController и firstViewController. FirstViewController отображается, когда приложение запускается, и оно толкает secondViewController.

Внутри secondViewController я определил свойство.

Теперь я хочу изменить это свойство в firstViewController, а затем нажать secondViewController, но по какой-то причине, как только второстепенный контроллер переключится, мое свойство сбрасывается до нуля ... почему это происходит? heres мой код:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
secondViewController.test = 2; 
[self.navigationController pushViewController:secondViewController animated:YES];  

} 

Свойство теста в этом примере - просто простой NSInteger. Теперь, как только secondViewController будет нажата, значение «test» больше не будет равным нулю. Почему ????

вот файл заголовка моего secondViewController: #import

@interface secondViewController : UIViewController { 

NSInteger test; 

} 

@property NSInteger test; 

@end 

вот файл .m:

- (void) viewDidLoad{ 
NSLog(@"%i", self.test): 
} 
+0

Можете ли вы показать код для SecondViewController? То есть viewDidLoad, viewDidAppear, функция setter для теста ... и как и когда вы получаете доступ к этому значению? – Eiko

+0

Я добавил его к коду выше –

ответ

0

Если вы проверяете его из viewDidLoadtest не всегда может быть 2 Я действительно не понимаю, почему это так. Пример:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    SecondViewController viewController = [[SecondViewController alloc] init]; 
    viewController.test = 2; 
    [self.navigationController pushViewController:viewController animated:YES]; 
} 

// In SecondViewController 

- (void)viewDidLoad { 
    NSLog(@"ViewDidLoad: %i", self.test); 

    [super viewDidLoad]; 
} 

- (void)viewWillAppear:(BOOL)animated { 
    NSLog(@"ViewWillAppear: %i", self.test); 

    [super viewWillAppear:animated]; 
} 

Это иногда приводит следующий вывод:

ViewDidLoad: 0

ViewWillAppear: 2

Но иногда это может также привести к следующему выходу :

ViewDidLoad: 2

ViewWillAppear: 2

Таким образом, я рекомендую вам использовать переменную в ViewWillAppear -метод вместо ViewDidLoad -метода. Вы должны создать свои UIView и т. Д. В методе ViewDidLoad и настроить их на свою тестовую переменную в ViewWillAppear -методе :).

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

+0

Спасибо, я получил работу! но затем я столкнулся с другой проблемой: Я хочу добавить третий монитор, и упомянутое выше свойство теперь принадлежит этому третьему монитору. Я устанавливаю свойство в firstViewController.Тогда я нажимаю secondViewController. SecondViewController подталкивает третий монитор управления! Как только я прихожу к третьему монитору, моя собственность потеряна .... Любые идеи? –

+0

Я понял. Огромное спасибо! –

+0

Добро пожаловать. – elslooo

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