2009-07-12 4 views
1

UIView.hpourquoi ne reconnaîtra-t-il pas le @properties du fichier d'en-tête du fichier principal?

#import <UIKit/UIKit.h> 
#import <Foundation/Foundation.h> 

@interface UIView : UIResponder { 
    IBOutlet UILabel *endLabel; 
    IBOutlet UIButton *goButton; 
    IBOutlet UITextField *textBox1; 
    IBOutlet UITextField *textBox2; 

    @property(nonatomic, retain) UILabel *endLabel; 
    @property(nonatomic, retain) UIButton *goButton; 
    @property(nonatomic, retain) UITextField *textBox1; 
    @property(nonatomic, retain) UITextField *textBox2; 
} 
- (IBAction)goButtonClicked; 
@end 

UIView.m

#import "UIView.h" 

@implementation UIView 

@synthesize textBox1, goButton; 
@synthesize textBox2, goButton; 
@synthesize textBox1, endLabel; 
@synthesize textBox2, endLabel; 
@synthesize goButton, endLabel; 

- (IBAction)goButtonClicked { 

} 

@end 
+0

Comme mentionné dans mon message; vous essayez de réimplémenter UIView; ce n'est évidemment pas bon, car cette classe existe déjà et existe définitivement. Vous devez renommer votre classe et l'implémenter en tant que sous-classe à UIView (par exemple MyView, bien que des noms plus descriptifs soient généralement préférés) –

Répondre

4

Pour aller un peu fou avec les @synthesize s, sommes-nous? Je crois que votre problème principal ici est que les déclarations @property doivent être après la fermeture de @interface. Je suis surpris que le compilateur n'ait pas lancé un drapeau rouge de la taille du Groenland, tho '.

De plus, vous avez probablement voulu faire une sous-classe personnalisée de UIView; Je vais utiliser MyView.

//MyView.m -- correct synthesize declaration 
@synthesize textBox1, goButton, textBox2, endLabel; 

//MyView.h -- correct interface declaration 
#import <UIKit/UIKit.h> 
#import <Foundation/Foundation.h> 

@interface MyView : UIView { 
    IBOutlet UILabel *endLabel; 
    IBOutlet UITextField *textBox1; 
    IBOutlet UITextField *textBox2; 
    IBOutlet UIButton *goButton; 
} 

@property(nonatomic, retain) UIButton *goButton; 
@property(nonatomic, retain) UILabel *endLabel; 
@property(nonatomic, retain) UITextField *textBox1; 
@property(nonatomic, retain) UITextField *textBox2; 

@end 
+0

Ouais, en fait, je les ai sortis et ça ne marchera toujours pas! Je les ai mis juste là pour voir ce qui se passerait ... –

0

Le premier problème est que vous désignez votre classe UIView, qui existe déjà dans UIKit. Voir @ Williham des conseils sur la résolution de ce problème.

Vous avez seulement besoin d'un @synthesize par propriété, et lorsque le nom de la propriété correspond à l'instance nom de variable, vous ne devriez avoir besoin de faire quelque chose comme ceci dans votre fichier .m:

@synthesize endLabel; 
@synthesize goButton; 
@synthesize textBox1; 
@synthesize textBox2; 

En outre, vous êtes susceptible de rencontrer des problèmes pour faire fonctionner votre méthode IBAction. Pour utiliser une méthode pour une liaison cible-action, elle doit avoir un type de retour IBAction (que vous avez correct) et accepter un paramètre id représentant l'expéditeur. La signature de la méthode canonique ressemble à ceci:

- (IBAction) goButtonClicked:(id)sender; 

Je recommande en fait un nom de méthode qui n'est pas explicitement lié au bouton qui invoque, d'autant plus qu'il pourrait y avoir d'autres façons d'invoquer la même action. (Par exemple, si vous écriviez une application de bureau, un équivalent de clé ou une commande de menu pourrait faire la même chose.)

Questions connexes