Почему мой ViewDidLoad загружается каждый раз?

Я создаю приложение, в котором я реализовал вход в FB. Поэтому я пишу код кнопки FBLogin в моем ViewDidLoad в файле ViewController.m.

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

FBSDKLoginButton *loginButton = [[FBSDKLoginButton alloc] init];
loginButton.center = self.view.center;
[self.view addSubview:loginButton];

}

но когда я запустил этот код. Кнопки fb появляются на всех страницах моего приложения, это означает, что мой метод viewController.m ViewDidLoad вызывается каждый раз. Почему? Я ищу решение последние 4 часа, но пока не получил никакого результата. Пожалуйста, помогите мне.


person M Swapnil    schedule 08.05.2015    source источник
comment
Ваши контроллеры представления наследуются от этого контроллера представления? Кроме того, не видя больше кода, мы можем только стрелять в него вслепую.   -  person Lord Zsolt    schedule 08.05.2015
comment
Представление, появляющееся на нескольких страницах, указывает на повторное использование этого класса, а не на то, что viewDidLoad вызывается несколько раз.   -  person sasquatch    schedule 08.05.2015
comment
@ Лорд Жолт - да. мои контроллеры представления наследуются от этого контроллера представления.   -  person M Swapnil    schedule 08.05.2015
comment
создание экземпляра контроллера представления приводит только к вызову viewdidLoad.. так что это означает, что ваш текущий ViewController.m создает экземпляр где-то.. так что выясните, что   -  person Anish Parajuli 웃    schedule 08.05.2015
comment
@anish - все мои классы наследуются этим контроллером представления. как интерфейс контествиевконтроллер : вьюконтроллер. Может ли это быть причиной моей ошибки?   -  person M Swapnil    schedule 08.05.2015
comment
да.. в этом суть.. так что найдите решение, которое помогает запускать контроллер представления только один раз.. один пример здесь stackoverflow.com/questions/29699001/   -  person Anish Parajuli 웃    schedule 08.05.2015
comment
@anish- спасибо, я напишу, если найду какое-нибудь решение. Спасибо за ваши предложения.   -  person M Swapnil    schedule 08.05.2015
comment
да.. если вы не можете, попробуйте опубликовать свой проект... мы попробуем   -  person Anish Parajuli 웃    schedule 08.05.2015
comment
никогда не просите +1 на ТАК.. попробуйте сделать это автоматически.... но я сделаю это за вас   -  person Anish Parajuli 웃    schedule 08.05.2015


Ответы (2)


Как вы сказали, ваши контроллеры представления наследуются от этого контроллера представления, поэтому каждый контроллер представления, который вызывает [super viewDidLoad], будет выполнять этот метод. (Решение не в удалении вызова super).

Вместо создания этого ViewController и любого другого контроллера представления, наследуемого от этого, вы можете:

  • Создайте CommonViewController, который реализует все, что является общим для ваших контроллеров представления.
  • Создайте FacebookLoginViewController, который также наследуется от CommonViewController.

Таким образом, ваше дерево наследования будет выглядеть так:

CommonViewController
      /          \
     /            \
    /              \
FacebookLoginVC    OtherViewControllers

Вместо:

ViewController (which is equivalent to FacebookViewController)
     |
     |
     |
OtherViewControllers
person Lord Zsolt    schedule 08.05.2015

Вот ответ на мой вопрос

Я сделал небольшую ошибку, когда наследовал все другие ViewControllers и основной класс ViewController с ViewController. я изменил свой код с помощью

 @interface ViewController : UIViewController


 @end

вместо

 @interface ViewController : ViewController

 @end

и все остальные классы тоже нравятся

   @interface homeViewController : UIViewController

   @interface contestViewController : UIViewController


   @interface menuViewController : UIViewController 

и т.п.

Это просто решило мой вопрос. Спасибо за помощь, ребята.

person M Swapnil    schedule 08.05.2015