2

iPhone開発初心者です。私を助けてください

NSObjectメソッドがビューを作成しているときにビューコントローラーのバックグラウンドでクラスからメソッドを呼び出すビューコントローラーがありself.view addSubview:view、この行の後にビューが再度呼び出しをロードしました。

この問題が発生する理由がわかりません。ここで私のコードを教えてください。

NSObject.m

- (void) showModalMessage:(NSString *)mes
{
  self = [super init];
        if (self) {
            objViewController = [[ViewController alloc] init];
        }
    [objViewController showPopUp:mes];
}

ViewController.m
- (void) showPopUp:(NSString *)mes
{

    labelView = [[UIView alloc] initWithFrame:CGRectMake(470, 740, 380, 50)];
    [self setLabelViewSettings];
    label = [[UILabel alloc] initWithFrame:CGRectMake(20, 8, 340, 30)];
    [self setLabelSettings];
    [labelView addSubview:label];
    [label release];
    [self.view addSubview:labelView];// After This line View did load calls again 
    [labelView release];

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.6];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(hide)];
    [UIView commitAnimations];
}

私の悪い英語で申し訳ありませんが、私を助けてください

4

1 に答える 1

4

ビュー コントローラがそのビューをメモリにロードするたびに、 のサブクラスがUIViewController自動的に呼び出されます。viewDidLoadビュー コントローラーは、必要な場合にのみビューを読み込みます。その[self.view addSubview:labelView]ためself.view、ビューがメモリにロードされてviewDidLoad呼び出されます。UIViewController Class Referenceで説明されているように、この行の直前でビュー プロパティは nil である必要があり、ビュー プロパティにアクセスすると、self.view自動的にビューがメモリに読み込まれます。

viewDidLoadビュー コントローラーはビューをアンロードし、メモリ不足の状況でビュー プロパティを nil に設定する可能性があるため、複数回呼び出すことができることに注意してください。viewDidLoad複数回呼び出しても安全であることを確認する必要があります。

jrturton が指摘したようselfに、 で新しいオブジェクトを設定していますがshowModalMessage:、これは間違っています。showPopUp:これにより、新しく作成されたViewControllerオブジェクトに到達したときに、そのビューがまだロードされていないことが保証されるためviewDidLoad、ヒットしたときに常に呼び出しますself.view

于 2012-07-06T06:41:06.543 に答える