0

したがって、整数を設定するメソッドがあります。-(void)setcurrentviewfromint:(int)currentint{これは、というクラスにありMyViewます。私のviewDidLoadメソッドから、私はそれを呼び出し、それも 1 に設定します: currentviewヘッダー ファイルに作成された int 型です

- (void)viewDidLoad
{
    [super viewDidLoad];
    MyView *myview = [[MyView alloc]init];
    [myview setcurrentviewfromint:1];
}

次に、 にはMyView.m、次のクラスがあります。

-(void)setcurrentviewfromint:(int)currentint{
    currentview = currentint;
    NSLog("currentviewis:%d",currentview);
    [self setNeedsDisplay];
}

- (void)drawRect:(CGRect)rect {
    NSLog(@"drawRectCalled");
    if (currentview == 1) {
        NSLog(@"do something here");
        }
    }

}

ただし、デバッガーは次のように出力します。

2012-07-18 18:02:44.211 animation[76135:f803] currentviewis:1
2012-07-18 18:02:44.223 animation[76135:f803] drawRectCalled

しかし、「ここで何かをする」は印刷されません。currentview1に等しくない理由はありますか?

4

2 に答える 2

2

まず、ご質問について。現在のビューのデータ型は何ですか? 次に、 setcurrentviewfromint: の NSLog が呼び出されないように見えます。呼び出された場合は、「currentviewis:1」が表示されるので、正しくリンクされていることを確認してください。

そして、私は言わなければならない、キャメルケース!メソッド名はすべて小文字で、読みにくいです。:)

于 2012-07-18T22:34:47.977 に答える
0

問題は、設定している MYView が currentView を読み取っているものではないことです。

viewDidLoad では、ローカル変数 myView を作成し、その現在のビューを設定すると、この myView は何も指していないためメモリ リークになります。

MyView が viewDidLoad がオンになっているクラスであり、 currentview がそのクラスの int 属性であると仮定します (ただし、メソッドが setcurrentview:) ではないためです。コードはもっと似ていると思います

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self setcurrentviewfromint:1];
}

したがって、現在のビュー自体を設定します

そして、他の人が述べているように、CamelCaseのObjective C標準を使用してください

于 2012-07-18T22:36:52.640 に答える