Je suis nouveau dans Cocoa et je ne comprends pas le concept de File's Owner
dans un fichier .nib.
Voici comment je verrais les choses:
Considérons un fichier fichier myNibFile.nib
qui décrit à quoi ressemble une fenêtre.
Maintenant, je veux connecter une fenêtre réelle à ce fichier .nib. Donc, je crée une classe myWindow
, qui est une sous-classe de NSWindowController
. Et, pour faire cette connexion, je change la méthode init
comme ceci:
-(id)init
{
[super initWithWindowNibName:@"myNibFile"];
return self;
}
Je comprends donc que lorsque je crée une instance de myWindow
, le "système" va consulter le fichier .nib et crée l'objet adéquat.
Donc, ma question est:
pourquoi dois-je spécifier que le File's Owner
de mon fichier .nib est myWindow
? N'est-ce pas redondant?
Je suppose que cela signifie que je n'ai pas vraiment compris ce que le File's Owner
. Qu'Est-ce que c'est ? Pourquoi le fichier .nib doit-il appartenir à quelque chose? Cela ne peut-il pas être "quelque part" dans mon "application" et quand cela est nécessaire, le "système" y va et l'utilise?
Merci de m'aider à voir plus clairement dans ces nouveaux concepts!
Deux points à retenir:
loadNibNamed:
ou initWithNibName:
.Vous avez donc créé une vue élégante avec de nombreux boutons, sous-vues, etc. Si vous souhaitez modifier n'importe lequel de ces vues/objets à tout moment après avoir chargé le nib À PARTIR de l'objet à charger (généralement un contrôleur de vue ou de fenêtre), vous définissez les prises pour ces objets sur le propriétaire du fichier. C'est si simple.
C’est la raison pour laquelle, par défaut, tous les contrôleurs de vue ou contrôleurs de fenêtre agissent en tant que propriétaires de fichiers et disposent également d’une sortie vers la fenêtre principale ou d’un objet de vue dans le fichier nib: parce que, si vous contrôlez quelque chose, vous devez absolument avoir un point de vente pour que vous puissiez lui envoyer des messages.
La raison pour laquelle il est appelé propriétaire du fichier et qui occupe une place particulière est que, contrairement aux autres objets de la nib, le propriétaire du fichier est externe à la nib et n'en fait pas partie. En fait, il ne devient disponible que lorsque le nib est chargé. Donc, le propriétaire du fichier est un remplaçant ou un proxy pour l'objet réel qui chargera plus tard le nib.
J'espère que vous avez compris. Je vais clarifier l'un des points si vous le demandez.
La chose fondamentale à comprendre est qu'Interface Builder vous permet de créer des objets automatiquement connectés les uns aux autres, sans aucun effort de la part de votre programme. Vous pouvez instancier toutes sortes d’objets, y compris ceux qui ne sont pas visibles, et ils peuvent être liés entre eux; Par exemple, vous pouvez créer l'instance d'une source de données de vue tableau avec la vue elle-même, etc. Ce mécanisme est généralement utilisé pour créer un délégué d'application dans votre NIB de menu principal.
Toutefois, comme tout est fait par glisser-déposer, il semble qu'il ne soit pas possible de créer une connexion entre les objets NIB et les objets qui existent déjà dans votre application, à une exception près.
Lorsque le code charge le fichier NIB, vous avez la possibilité de spécifier exactement l'objet one que la NIB considérera comme le "Propriétaire des fichiers". Il s'agit de l'espace réservé que vous voyez dans Interface Builder. puisqu'il peut représenter n'importe quel objet de votre application, Interface Builder ne peut pas savoir quelles actions/sorties sont disponibles sur cet objet. C'est pourquoi vous pouvez modifier la "classe" du propriétaire de fichiers, dans l'onglet Attributs.
Le propriétaire des fichiers ne représente pas vraiment la "propriété" ou la "parentalité". Ce qu'il représente est "l'objet qui a chargé cette NIB".
Le propriétaire de File est un espace réservé dans IB. Ainsi, tous les points de vente et les actions de votre code peuvent être "liés" dans IB. Vous pouvez alors cliquer tout en appuyant sur la souris pour connecter des éléments de l'écran au code.
Le propriétaire du fichier dans Interface Builder est tel qu'il connaisse le type d'objet du parent. Ceci est utilisé de deux manières. Tout d'abord, dans Interface Builder, afin que IB sache quels points de vente et quelles actions sont disponibles pour vous connecter. Deuxièmement, il est utilisé par le framework d’application pour savoir comment reconnecter les éléments au reste de votre code une fois le fichier nib chargé.