Contexte: Je suis un gars .NET qui n'a pas d'expérience en Objective-C/Cocoa, mais je travaille sur le livre d'Aaron Hillegass, "Cocoa Programming for Mac OS X "essayant de prendre les bases. (Grand livre jusqu'à présent, BTW!) Dans le but de compléter l'un des défis secondaires facultatifs, j'écris une application basée sur le document qui permet aux utilisateurs de dessiner des ovales dans des emplacements arbitraires.Question Obj-C de base: Méthodes d'appel sur un objet
J'ai deux classes, interfaces comme suit:
@interface OvalDrawDocument : NSDocument
{
IBOutlet OvalView* myOvalView;
}
@end
@interface OvalView : NSView {
NSMutableArray *ovals;
}
@property (readwrite, assign) NSMutableArray *ovals;
@end
Dans la mise en œuvre de OvalDrawDocument
je suis en train d'utiliser l'auto-généré accesseur pour ovals
comme si la propriété:
// in OvalView.m
@synthesize ovals;
// in OvalDrawDocument.m
[myOvalView setOvals:loadedOvals]; // setter?
NSMutableArray *ovalsToSave = [myOvalView ovals]; // getter?
Cependant , le compilateur m'avertit que les méthodes ne sont pas trouvées, et qu'elles ne fonctionnent pas non plus à l'exécution. Ils apparaissent dans Code Sense, mais je suppose que cela ne signifie vraiment rien (Je m'habitue toujours aux différences entre XCode/VS ici) Je suppose qu'il y a un concept d'Obj-C que je ne comprends pas ici, peut-être lié à le fait que myOvalView
est aussi un IBOutlet
, mais je suis assez perdu. Que devrais-je faire, et plus important encore, pourquoi?
Mise à jour: Je ne déclare OvalView.h en OvalDrawDocument.m. Cela a corrigé les avertissements de compilation. Cependant, l'enregistrement et le chargement ne semblent toujours pas fonctionner et je n'arrive pas à comprendre pourquoi.
Comme demandé, j'ai posté le code source complet en ligne pour la lecture: Browse ou Download (59KB zip).
est le ovals @synthesize dans @implementation OvalView bloc? – stefanB
Vous devriez publier tous les fichiers afin que nous puissions voir où le problème est. Très probablement, vous avez quelque chose au mauvais endroit, pas importé ou non déclaré, mais il est difficile de dire à partir de ce que vous avez posté. Les IBOutlets/IBActions n'ont aucun effet sur votre code, ils sont supprimés lorsque vous compilez. Xcode établit les bonnes connexions et s'en débarrasse. –
Juste pour souligner, vous voudrez probablement conserver plutôt qu'affecter lorsqu'il s'agit d'objets et de propriétés. –