Cocoa: Communication entre objets, Notifications, etc

Fractal

Membre actif
8 Juillet 2006
152
6
46
Bruxelles, BE
Bonjour à tous,

Après avoir épluché la doc d'Apple, je ne saisi toujours pas certains concepts de base.

Mon programme récupère des infos sur le net et les affiches dans une NSTableView. Il est structuré actuellement comme suit:
1) Un objet "Controller" qui rempli les NSTableView en récupérant les données d'une classe "Data", à laquelle j'accède en déclarant d'abord:
Bloc de code:
LFData = [[LF_Data alloc] init];
Dans Interface Builder, je n'ai qu'un NSObject, le "Controller" qui gère la partie graphique de mon application.

Mon application n'est pas gérée en Core Data, mais j'aimerais y passer. J'aimerais donc accéder à mon objet "Data" en direct dans Interface Builder. Toutefois, "Controller" devrait toujours y avoir accès d'une manière ou d'une autre, puisque c'est lui qui initie le chargement des données.

J'ai ajouté un NSObject "Data" dans interface Builder, mais quand j'y accède, il ne contient pas de données. Comme expliqué ci-dessus, c'est "Controller" qui appelle les fonctions de récupération de ces données en passant par la classe "Data"!

En réalité il me semble que mon programme contient maintenant deux "instances" de "Data":
- Une créée comme une classe (LFData = [[LF_Data alloc] init])
- Et une créée avec Interface Builder en tant que NSObject.

Qu'en pensez-vous?

Merci d'avance.

PS: Désolé si mes explications ne sont pas très claires, je mélange encore un peu tous les termes techniques ;)
 
Mon application n'est pas gérée en Core Data, mais j'aimerais y passer. J'aimerais donc accéder à mon objet "Data" en direct dans Interface Builder. Toutefois, "Controller" devrait toujours y avoir accès d'une manière ou d'une autre, puisque c'est lui qui initie le chargement des données.
Tu peux créer des IBOutlet dans tes classes ce qui permet aux objets déclarés dans IB de se retrouver.
En réalité il me semble que mon programme contient maintenant deux "instances" de "Data":
- Une créée comme une classe (LFData = [[LF_Data alloc] init])
- Et une créée avec Interface Builder en tant que NSObject.
Oui, les instances déclarées dans IB sont initialisées au chargement du fichier NIB. Enlèves en un des deux.
 
Concernant les IBOutlets, je les utilises bien sur déjà pour communiquer avec mon interface. Exemple:
Bloc de code:
IBOutlet NSTableView *tableView;

Mon but est donc de communiquer de mon objet "Controller" vers mon object "Data" en utilisant une méthode du genre:
Bloc de code:
[Data getContentFromUrl:monurl]

en sachant que j'ai une fonction comme suit dans "Data":
Bloc de code:
- (void) getContentFromUrl:(NSURL *) monurl;

Quel genre d'IBOutlet dois-je déclarer pour pouvoir connecter mes deux objets dans Interface Builder?

---------- Nouveau message ajouté à 21h08 ---------- Le message précédent a été envoyé à 20h38 ----------

Je répond à ma propre question!

En fait il suffit de déclarer l'IBOutlet comme suit:

IBOutlet LF_Data *LFData;

Il faut évidemment supprimer l'alloc et l'init de la classe LF_Data.