0

iOS5とストーリーボードを使用しています。2 つの異なる識別子を持つ 2 つのビューがあります。デバイスの向きを変えるとビューを変更したい。これは私のコードです:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

    if(((interfaceOrientation == UIInterfaceOrientationLandscapeLeft) || 
        (interfaceOrientation == UIInterfaceOrientationLandscapeRight))){

        self.view = [self.storyboard instantiateViewControllerWithIdentifier:@"Landscape"];

    }
    else if(((interfaceOrientation == UIInterfaceOrientationPortrait) || 
              (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown))){

        self.view = [self.storyboard instantiateViewControllerWithIdentifier:@"Portrait"];

    }

    return YES;
}

しかし、アプリがクラッシュします。問題はどれですか?

編集: 2 つの uiview を追加し、デバイスを回転させたときに 2 つの id を uiview に入れると、クラッシュします。これはコードです:

- (void)viewDidLoad 
{
    [super viewDidLoad];

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:@"UIDeviceOrientationDidChangeNotification" object:nil];

}

- (void) orientationChanged:(id)object
{  
    portraitView = [self.storyboard instantiateViewControllerWithIdentifier:@"TermoregolatoreTop"];
    landscapeView = [self.storyboard instantiateViewControllerWithIdentifier:@"Landscape"];

    UIInterfaceOrientation interfaceOrientation = [[object object] orientation];

    if (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) 
    {

        self.view = self.portraitView;
    } 
    else 
    {

        self.view = self.landscapeView;
    }
}
4

2 に答える 2

0
self.view = [self.storyboard instantiateViewControllerWithIdentifier:@"Portrait"];

idにを返し、UIViewControllerあなたはそれをに割り当てていUIViewます。

于 2012-05-30T11:14:48.413 に答える
0

UIDeviceOrientationDidChangeNotificationビューコントローラーを解放するときは、オブザーバーを削除する必要があります。

メモリから削除された可能性が最も高いクラスで通知がトリガーされるため、クラッシュが発生します。

于 2012-05-30T12:26:27.357 に答える