2010-10-15 125 views
3

我初始化通过视图(图片):我的变量在哪里? Objective-C的

Image *myImageView = [[Image alloc]init]; 
    myImageView.myId = randomImageNumber; 
    [myImageView initWithImage:myImage]; 

在图像类我做一个日志(LOG1),并得到了预先设定的randomImageNumber。 后来,在同一个类中,我做了第二个日志(LOG2)。 为什么我的第二个日志没有价值了?

这里一流形象的我的执行文件:

@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); 
} 

的“回归自我”清空身份识别码,我在头文件中声明,并且被定为初始化。 我该如何预防?

我Headerfile看起来是这样的:

@interface Image : UIImageView 
{ 
    int myId; 
} 
@property (assign) int myId; 

@end 

回答

2

两件事情在你的代码。永远不要在一个对象上多次调用init,这会把你的对象搞砸。

它改成这样:

Image *myImageView = [[Image alloc] initWithImage:myImage]; 
myImageView.myId = randomImageNumber; 

这初始化的NSObject一个子类时,是你的问题,在默认情况下,所有的属性都设置为0(或nil如果他们是指针)。

如果你需要有myId默认值,那么做到这一点:

// Image.m 

@implementation 

// other code 

-(id) initWithImage:(UIImage *) image 
{ 
    if (self = [super initWithImage:image]) 
    { 
     self.myId = randomImageNumber; 
    } 

    return self; 
} 

// other code 

@end 
+0

好吧,我想这种初始化的,但在这种情况下,即使我的第一个日志没有给我一个值 - >只是0就像你说的。我怎么能初始化我的图像类,而不会失去我的头(声明的图像类)声明的实例变量? – algro 2010-10-15 12:37:51

+0

@algro第一个日志*应该给出0.实例变量在初始化之前总是空的 - 它们不能在接口中给出值,只能声明。你应该发布头文件中的内容,因为这听起来像是有一些误解。 – walkytalky 2010-10-15 12:57:51

+0

好的,我发布了我的头文件...第一个日志是否为0并不重要。只有在触及 - > LOG2时才需要它。那时该值应该设置为否? – algro 2010-10-15 13:05:29