Метод ViewDidLoad не вызывается в iPhone? - PullRequest
0 голосов
/ 01 февраля 2011

Я передал NSMutableDictionary в FirstClass, используя пользовательский метод init.

Второй класс,

firstClass = [[FirstClass alloc] initWithFeedData:feedDictionary];

[self.navigationController pushViewController:firstClasss animated:YES];

FirstClass

 - (FirstClass *) initWithFeedData:(NSMutableDictionary *) dataDictionary {
 {
     NSLog(@"%@", dataDictionary);

     [[NSBundle mainBundle] loadNibNamed:@"FirstClass" owner:self options:nil];

    //[self viewDidLoad]; Without call, ViewDidLoad method doesn't call.

 }

 - (void) viewDidLoad {

      [super viewDidLoad];

      NSLOG(@"Inside View DidLoad"); // This method never calls.
  }

В моем методе viewDidLoad не вызывается, если я вызываю «[self viewDidLoad]», то только метод viewDidLoad работает правильно. Я не знаю, почему метод viewDidLoad не вызывает напрямую без вызовов в другом методе? Пожалуйста, помогите мне.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 01 февраля 2011

Если вы подклассифицируете UIViewController, что, как я полагаю, так и есть, поскольку вы ожидаете viewDidLoad, то вам следует переопределить его назначенный инициализатор initWithNibName:bundle:, если вы используете XIB, в этом случае viewDidLoad будет вызываться после загрузки XIB. Если вы не используете XIB, вы должны реализовать метод loadView для создания вашего представления, и viewDidLoad будет вызываться после завершения loadView.

1 голос
/ 01 февраля 2011

@ Стивен прав, по крайней мере, вам нужно переписать ваш оператор init, чтобы вернуть self.Однако гораздо проще и надежнее объявить свойство в вашем контроллере представления и передать объекты таким образом.

FirstClass *firstClass = [[FirstClass alloc] initWithNibNamed:nil];
firstClass.feedDictionary = feedDictionary;

[self.navigationController pushViewController:firstClasss animated:YES];
[firstClass release];

Ваш метод viewDidLoad теперь будет вызываться, и ваш feedDictionary будет сидеть там и ждать вас.

0 голосов
/ 01 февраля 2011

Ваш init метод неверен.Это должно выглядеть примерно так:

- (id) initWithFeedData:(NSMutableDictionary *) dataDictionary {
  if (self = [super init]) {
    // TODO: do initialisation stuff with dataDictionary
  }

  return self;
}

Предполагается, что FirstClass является производным от UIViewController.

Пока ваш файл NIB имеет то же имя, что и ваш класс, он должензагружаться автоматически - для звонка loadBundle: нет необходимости.Вот что документация говорит о свойстве nibName:

Если значение этого свойства равно nil и вы не переопределили метод loadView в своем пользовательском подклассе, представлениеконтроллер ищет файл пера, имя которого (без расширения .nib) совпадает с именем вашего класса контроллера представления.

...