私の変数はどこですか? Objective-C
-
30-09-2019 - |
質問
ビュー(画像)を初期化して:
Image *myImageView = [[Image alloc]init];
myImageView.myId = randomImageNumber;
[myImageView initWithImage:myImage];
画像クラスでは、ログ(log1)を実行し、以前に設定されたrandomimageNumberを取得します。その後、まったく同じクラスで、2番目のログ(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);
}
「Return Self」は、私がヘッダーファイルで宣言したMyIDを空にし、初期化に設定されました。どうすればそれを防ぐことができますか?
私のheaderfileは次のようになります:
@interface Image : UIImageView
{
int myId;
}
@property (assign) int myId;
@end
解決
あなたのコードにカップルのもの。オブジェクトにイニシを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
他のヒント
私はそれを見つけたと思います:
https://www.google.com/maps/place/variable/@53.626739,10.025728,17z/data =!3m1!4b1!4m2 !3m1!
この変数があなたのものかどうかを確認できますか?
Besties Phil
所属していません StackOverflow