3

ビュー(画像)を次の方法で初期化します。

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

Imageクラスで、Log(LOG1)を実行し、以前に設定されたrandomImageNumberを取得します。後で、まったく同じクラスで、2番目のLog(LOG2)を実行します。2番目のログに値がなくなったのはなぜですか?

ここに、クラスイメージの実装ファイルがあります。

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

「returnself」は、ヘッダーファイルで宣言し、初期化時に設定されたmyIdを空にします。どうすればそれを防ぐことができますか?

私のヘッダーファイルは次のようになります。

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

@end
4

2 に答える 2

7

私はそれを見つけたと思います:

https://www.google.com/maps/place/Variable/@53.626739,10.025728,17z/data=!3m1!4b1!4m2!3m1!1s0x47b1885360fab615:0x584b82c7dfb5f612

この変数があなたのものであるかどうかを確認できますか?

最高のフィル

于 2014-05-23T16:53:48.943 に答える
2

コード内で物事を結合します。オブジェクトに対してinitを2回以上呼び出さないでください。これは、オブジェクトを台無しにするだけです。

これに変更します:

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
于 2010-10-15T12:22:05.553 に答える