2010-10-15 112 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