storyboard instantiateViewControllerWithIdentifier de ne pas fixer de IBOutlets
Je suis à l'aide de storyboard instantiateViewControllerWithIdentifier:
et je m'aperçois que tous les IBOutlets
j'ai câblé sont toujours nul. Cependant, la IBActions
j'ai câblé de travail. La vue et le contrôleur sont liés (j'.e contrôleur.la vue n'est pas nul), et si je montre la vue, il affiche ce que j'attends.
Ce qui me manque?
Voici ma configuration:
- J'ai une Vue Contrôleur définie dans mon storyboard. Je lui ai donné un identifiant qui est le même identifiant-je utiliser lors de l'appel de
instantiateViewControllerWithIdentifier:
- J'ai mis en place le point de vue du propriétaire en cliquant sur la Vue-Contrôleur (un peu moins de Premier répondant) et sous l'Identité de l'Inspecteur de la Classe Personnalisée pour être le même nom que la classe je veux le fil de la vue.
- Puis-je ouvrir l'Assistant de montage, de contrôle et traîné les éléments d'INTERFACE utilisateur pour créer le
IBOutlets
etIBActions
.
- J'ai essayé de casser la vue dans son propre plume et je vois les mêmes problèmes. initWithNibName:bundle: aussi ne semble pas définir IBOutlets même si ils sont définis par ctrl-cliquer-glisser de l'IB.
- Pour contourner ce problème, je suis en utilisant [[NSBundle mainBundle] loadNibNamed:@"myNib" propriétaire:options de contrôleur:nil]. Ce n'charger la plume et affecte le IBOutlets les valeurs du contrôleur. Mais cela semble tout à fait tort quand il s'agit d'une méthode sur le contrôleur qui semble faire la même chose.
- Je suis un peu confus avec votre mis en place, pourquoi vous mettez-vous en place en vue du propriétaire? votre ib points de vente sont placés dans un viewcontroller sur le story-board droit? lorsque vous instanciez ce viewcontroller les points de vente devrait fonctionner si vous définissez le type de cette CR pour correspondre à votre en-tête personnalisé et la mise en œuvre.
- Correction: je n'ai pas le point de vue du propriétaire, mais le point de vue de la classe controller type pour correspondre au type de classe personnalisée.
- Si vous cliquez sur sur la représentation iconique de votre point de vue contrôleur dans la table de montage séquentiel pour afficher les connexions HUD, voyez-vous tous vos points de vente connectés?
- Oui. Toutes les prises sont reliés. Clic droit montre également que tous les éléments sont connectés.
Vous devez vous connecter pour publier un commentaire.
Le point de vue semble être initialisé correctement qu'après il est tout d'abord accéder. Le problème disparaît lors de l'appel de
ou plus simplement
[De m'utiliser comme mauvais exemple]
Peut-être pas une bonne idée, après tout, il fonctionne, mais il viole la régulière de la prise de chargement de l'application instable ^_^.
Je vais laisser la réponse ici au cas où quelqu'un d'autre veut savoir si vous le faites.
J'ai eu le même problème, cependant le composant personnalisé j'ai conçu n'est pas chargé par presentViewController (charge en superposition à la vue précédente)
Vous pouvez simplement appeler
myViewController.loadView()
//Swift[myViewController loadView]
//Obj-CYou should never call this method directly.
. D'abord je viens de aveuglément copié ce code et de mon point de vue a été chargé, mais ensuite, j'ai couru dans d'autres problèmes que je ne pouvais pas expliquer. Après la suppression de ce code, tout a fonctionné. Je recommande fortement de ne pas appeler cette méthode.Points de vente sont établis avec la Valeur de la Clé de Codage, vous pouvez mettre ceci dans votre vue contrôleur de sous-classe:
Et de mettre un point d'arrêt sur les deux appels de super.
Dans le débogueur, je vais l'essayer:
La comparaison de " soi " à la vue du contrôleur que vous pensez que vous êtes en appliquant les points de vente. Peut-être que votre storyboard a un second point de vue contrôleur de vous attendons pas. Lorsque vous avez dit que vous "mettre en place un propriétaire" j'ai pensé que c'était étrange de la terminologie. Ne vous faites glisser l'un des objets de cube pour représenter votre vue-contrôleur en plus de la représentation qui est déjà là?
Comparer [auto valueForKey:touche] ou [auto valueForKeyPath:chemin d'accès clé] ou tout simplement [auto outletName] avec le passé dans la valeur après l'appel à l'aide de super. Peut-être que vous avez setter qui n'est pas de faire ce que vous voulez. J'ai vu une erreur comme ça une couple de fois où les gens ont une prise pour un objet avec un nom comme "prénom" et puis une action avec le sélecteur sur "setFirstName:". Qui confond la valeur de la clé de codage, et vous vous retrouvez avec setFirstName: appelé au cours de la plume de chargement avec l'intention de l'établissement de la prise, mais la définition pour la prise de courant est mise en œuvre comme une méthode d'action, de sorte que la prise de courant n'est jamais ensemble.
Le cadre de la instancié ViewController semble définir la IBOutlets.
ex:
Ce serait d'initialiser la IBOutlets de DemoViewController comme Étiquette, TextField, Bouton, Table, etc,.
Espère que cette aide.
view
ce qui fait la magie, pas de réglage de laframe
. Elle s'applique pour les points de vente qui sont à l'intérieur de la vue de la hiérarchie (pas, disons personnaliséNSObject
ceux).Si l'objet que vous créez un lien vers est une entité de niveau supérieur dans la scène, comme un ArrayController, la référence doit être solide (pas faible!) puisqu'il n'est pas retenu par le point de vue de la hiérarchie. Une référence faible peut causer des problèmes comme ce que vous décrivez.
Regardez ici pour plus d'informations: Devrait IBOutlets être forte ou faible, en vertu de l'ARC?
Personnes ont donné la solution de la façon d'obtenir le point de vue chargé (dont certains que vous ne devez jamais utiliser (
loadView()
) voici donc une façon de vérifier si votre vue est déjà chargéJe suis tombé sur le problème parce que j'avais une propriété avec un
didSet
observateur à la mise à jour de l'INTERFACE utilisateur qui évidemment ne fonctionne pas si les prises ne sont pas encore fixées, voici donc un exemple de code comment travailler autour d'elle:Alors maintenant, lorsque vous affichez les points de vente mis à jour mais aussi chaque fois que vous mettez à jour la propriété