initWithNibName .... метод не стреляет - PullRequest
0 голосов
/ 08 февраля 2012

В моем приложении на основе навигации метод initWithNibName не вызывается / fire

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Custom initialization
}
return self;
}

Я определяю rootViewController (calViewController) в appdelegate, как это

calViewController *objCalViewController = (calViewController *) [navController topViewController];

objCalViewController.context = [self managedObjectContext];


[window addSubview:navController.view];
[window makeKeyAndVisible];

Это проблема? Пожалуйста, дайте мне помощь

Ответы [ 3 ]

10 голосов
/ 08 февраля 2012

Когда ваш UIViewController определен в nib-файле или раскадровке (обычно как IBOutlet), initWithNibName:bundle: не вызывается, скорее initWithCoder:.Это тот случай, когда вы используете Interface Builder для установки UIViewController как части UITabBarController или UINavigationController и почти всегда при использовании раскадровок.

1 голос
/ 08 февраля 2012

в вашем appdelegate.m сделать так

calViewController *objCalViewController = [[calViewController alloc] initWithNibName:@"WebViewController_iPhone" bundle:nil];
objCalViewController.managedObjectContext = self.managedObjectContext;
navController = [[UINavigationController alloc] initWithRootViewController:objCalViewController];
[self.window setRootViewController:navController];
[window makeKeyAndVisible];
0 голосов
/ 08 февраля 2012

Хорошо, допустим, у меня есть viewController с именем TCViewController с

TCViewController.h, TCViewController.m and TCViewController.xib

и в TCViewController.m я переопределяю следующий метод.

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
   self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
   if (self) {
       // Custom initialization
   }
   return self;
}

В моем RootViewController я хочучтобы инициализировать TCViewController следующим образом

RootViewController.m

-(void)viewDidLoad //not necessarily this one, can be any method
{
 // This initialization calls the initWithNibname method implemented in TCViewController.m
TCViewController *viewController  = [[TCViewController alloc] initWithNibName:@"TCViewController" bundle:nil];

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


}

Если вы инициализируете viewController, как это, управление перейдет к методу initWithNibName в вашем подклассе, если вы его реализовали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...