J'ai un uiviewcontroller cod> appelé launkController lancé dans mon iPhone APP lorsque l'application ouvre d'abord:
- (void)viewDidLoad
{
NSLog(@"calling view did load");
[super viewDidLoad];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[self.view addSubview:imageView];
NSLog(@"displaying main controller");
}
3 Réponses :
Vous ne logeez pas votre contrôleur d'affichage à partir d'un fichier XIB et de commentaires que vous n'avez rien dans LoadView (ce qui permet de créer votre affichage de votre contrôleur de vue si vous n'utilisiez pas de fichier XIB). p>
Par conséquent, votre point de vue n'est pas chargé, il n'est donc jamais appelé que ViewDidLoad n'est jamais appelé. p>
Généralement, vous utiliseriez ViewDiDload sera appelé dès que la propriété Afficher votre contrôleur est accessible, c'est-à-dire lorsque vous l'affichez pour la première fois ou demandez-la (par exemple, avoir un code qui appelle initwithnibname: code> pour initialiser un nouveau contrôleur d'affichage, puis définissez l'image une fois qu'elle (si, exposez l'image en tant que propriété). p>
C.View code>. p>
mais je n'utilise pas xib ou initwithnib
Cela aurait été des informations utiles pour inclure dans votre question.
La raison ViewDidDidLoad n'a pas été appelée est parce que vous ne logeez pas de vue.
dans votre méthode init: p> signifie que vous ne faites que créer un vue nue de zéro. Ne pas le chargement d'une nib. p> Essayez cela à la place: p> Si vous avez un fichier XIB ou NIB avec le même nom que la classe de contrôleur d'affichage Il devrait trouver si. Sinon, vous pouvez simplement donner un nibname qui fonctionne. P> mise à jour: p> Si vous n'utilisez pas de fichiers NIB, la méthode appropriée n'est pas vueDidLoad. Vous devez implémenter Dans votre cas spécifique, il suffit de mettre tout ce qui est actuellement dans la vue ViewDidLoad dans LoadView. p> p> loadview code> au lieu de
ViewDidLoad code>. P>
Mais je n'utilise pas de nib, je veux créer la vue programmatique.
mis à jour. Lisez la documentation pour UIViewController pour plus de détails sur LoadView.
Je pense que c'est quelque chose comme des suivantes. Lorsque vous avez besoin de la propriété de View code> Inside UIViewController, il sera chargé de manière paresseuse.
- (UIView *)view
{
if (_view == nil) {
[self loadView]; //< or, the view is loaded from xib, or something else.
[self viewDidLoad];
}
return _view;
}
S'il vous plaît ne faites pas cela. Documentation Apple indique spécifiquement que LockView et ViewDidLoad ne doivent pas être appelés directement. De loadview code>: "Vous ne devez jamais appeler cette méthode directement."
@amattn: Vous avez raison. Mais je viens d'utiliser des codes ci-dessus pour décrire lorsque le -ViewDidIdload code> appelé.
MainController a-t-il une méthode
loadview code> mise en œuvre?
Non, qu'est-ce qu'il devrait aller dans loadview?
Vous ne le vérifiez pas si la nouvelle vue a été initiée. Déplacez NSLOG dans les SI-SWORCKETS pour voir si la vue a été initiée.
Oui, c'était inité. Je l'ai déplacé et je l'imprime toujours.
Avez-vous une NIB nommée
MainController.xib code> dans votre projet? Si vous ne le faites pas, vous devez remplacer
-LoardView code> et fournir une vue vide.
Connecté, si vous n'utilisez pas de NIBS: Stackoverflow.com/Questtions/8876212/...
Ce lien ne fournit pas de réponse, juste un autre problème. et @jasoncoco, non je n'ai pas de nib. Comment puis-je écraser LoadView de telle sorte que ViewDidLoad sera appelé
Je ne suis pas sûr que ce soit votre problème, mais vous pouvez simplement remplacer
-charloadview code> et créer une vue et l'affecter à
self.view code>. Utilisez-vous des storyboards?
Je ne suis pas sûr. Qu'est-ce qu'un storyboard?