Où est ma variable? objectif c
-
30-09-2019 - |
Question
J'Initialiser une vue (image) par:
Image *myImageView = [[Image alloc]init];
myImageView.myId = randomImageNumber;
[myImageView initWithImage:myImage];
A la classe Image je fais un journal (LOG1) et obtenir le randomImageNumber précédemment défini. Plus tard, dans la même classe, je fais un deuxième Log (LOG2). Pourquoi mon second journal ne plus aucune valeur?
Voici mon implémentation fichier de l'image Classe:
@synthesize myId;
-(id) initWithImage: (UIImage *) anImage
{
NSLog(@"LOG1%d",myId);
if ((self = [super initWithImage:anImage]))
{
self.userInteractionEnabled = YES;
}
return self;
}
}
-(void)touchesBegan...
....
- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"LOG2%d",myId);
}
Les bouteilles vides « auto » de retour myid que je déclarais dans l'en-tête et le fichier qui a été créé à l'initialisation. Comment prévenez-je cela?
mes regards Headerfile comme ceci:
@interface Image : UIImageView
{
int myId;
}
@property (assign) int myId;
@end
La solution
Couple choses dans votre code. jamais appeler initialisation plus d'une fois sur un objet, qui se dévisse votre objet.
Modifier à ceci:
Image *myImageView = [[Image alloc] initWithImage:myImage];
myImageView.myId = randomImageNumber;
C'est votre problème, par défaut lors de l'initialisation d'une sous-classe de NSObject
, toutes les propriétés sont mises à 0
(ou nil
si elles sont des pointeurs).
Si vous avez besoin d'avoir une valeur par défaut pour myId
faites ceci:
// Image.m
@implementation
// other code
-(id) initWithImage:(UIImage *) image
{
if (self = [super initWithImage:image])
{
self.myId = randomImageNumber;
}
return self;
}
// other code
@end
Autres conseils
Je pense que je l'ai trouvé:
Pouvez-vous vérifier si cette variable est la vôtre?
besties phil