Странное поведение Push и Pop, почему?

У меня есть два класса: addAlarm и Name,,,

на данный момент я нахожусь в addAlarm (addAlarm является подклассом UITableViewController), поскольку он выбирает строку, затем переходит к классу Name, как показано ниже.

        Name *ob = [[Name alloc] initWithStyle:UITableViewStyleGrouped];
        [self.navigationController pushViewController:ob animated:YES];

        [ob release];
        ob = nil;

тогда есть UINavigationBar с addAlarm как кнопка возврата по умолчанию, в то время как Name также является подклассом UITableViewController

Я наблюдаю, что когда я нажимаю кнопку возврата addAlarm в имени, затем он возвращается к addAlarm, и вызывается его метод viewWillAppear, но после этого он вызывает

         - (void)viewDidUnload

и

         - (void)dealloc

класса имен.

Я не могу понять, почему он вызывает методы Name после выполнения ViewWillApear из addAlarm, любая идея?


person Chatar Veer Suthar    schedule 16.07.2011    source источник
comment
это ожидаемое поведение. Если вы нажмете кнопку «Назад», он должен вызвать метод viewDidUnload и Dealloc класса, из которого вы выходите. Это не проблема.   -  person Deeps    schedule 16.07.2011
comment
но Deeps, как я могу сохранить данные для делегирования метода и показать в другом классе, пока он не вызывает свой метод перед следующим классом?   -  person Chatar Veer Suthar    schedule 16.07.2011
comment
Если этот вопрос будет решен, тогда проблема будет решена, например, в ViewWillApear я вызываю [self.tableView reloadData], и теперь он принимает обновленные данные, потому что данные обновляются в методе Dealloc имени, что мне делать?   -  person Chatar Veer Suthar    schedule 16.07.2011
comment
Посмотрите мой ответ и дайте мне знать, если он вам поможет.   -  person Deeps    schedule 16.07.2011
comment
не стоит обновлять данные в Dealloc!!! Выпускайте объекты только туда!   -  person Felix    schedule 16.07.2011


Ответы (1)


Вместо передачи данных в методе Dealloc вы можете передать данные в методе ниже.

-(void)viewWillDisappear:(BOOL)animated{

}

Другой метод — сохранить его в файле appDelegate, как показано ниже.

В файле appDelegate.h

NSString *strName;

@property (неатомарное, сохраняемое) NSString *strName;

В файле appDelegate.m

@synthesize strName;

Теперь вы можете создать объект Application в вашем NameController, как показано ниже.

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 

И сохранить значение, как это

appDelegate.strName = @"Value to be passed to addAlarm View"

Надеюсь, это поможет.

person Deeps    schedule 16.07.2011
comment
Спасибо, Deeps, я решил свою проблему, но можете ли вы сказать мне, что объект Name будет освобожден автоматически или нет? - person Chatar Veer Suthar; 16.07.2011
comment
Отлично вы решили. Вы можете написать [strName release] в методе Dealloc файла appDelegate.h. - person Deeps; 16.07.2011
comment
тогда этот делегат будет вызываться в конце приложения, когда приложение будет закрыто, до этого он будет в памяти? - person Chatar Veer Suthar; 16.07.2011
comment
Да, это. Вы можете отпустить его и сделать его нулевым, когда он вам больше не нужен. - person Deeps; 16.07.2011