Wo ist mein Variable? Ziel c
-
30-09-2019 - |
Frage
initialisieren ich einen Blick (Image) durch:
Image *myImageView = [[Image alloc]init];
myImageView.myId = randomImageNumber;
[myImageView initWithImage:myImage];
Bei der Image-Klasse I ein Log (LOG 1) zu tun und bekommen die zuvor eingestellte randomImageNumber. Später, in der gleichen Klasse, kann ich ein zweites Protokoll (LOG2). Warum wird mein zweites Protokoll mehr keinen Wert haben?
Hier ist meine umsetzungs Datei der Klasse Bild:
@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);
}
Die „Rückkehr Selbst“ Leergut myid, die ich in der Header-Datei deklariert und die bei der Initialisierung festgelegt wurde. Wie verhindere ich das?
meine Header sieht wie folgt aus:
@interface Image : UIImageView
{
int myId;
}
@property (assign) int myId;
@end
Lösung
Paar Dinge in Ihrem Code. NIEMALS ruft init mehr als einmal auf einem Objekt, das nur Schrauben auf Ihr Objekt.
Ändern es dazu:
Image *myImageView = [[Image alloc] initWithImage:myImage];
myImageView.myId = randomImageNumber;
Das ist dein Problem, standardmäßig, wenn eine Unterklasse von NSObject
Initialisierung werden alle Eigenschaften sind auf 0
(oder nil
wenn sie Zeiger sind).
Wenn Sie einen Standardwert für myId
haben müssen, dann tun:
// Image.m
@implementation
// other code
-(id) initWithImage:(UIImage *) image
{
if (self = [super initWithImage:image])
{
self.myId = randomImageNumber;
}
return self;
}
// other code
@end
Andere Tipps
Ich glaube, ich es gefunden:
Können Sie überprüfen, ob diese Variable bei Ihnen ist?
besties phil