1

私は夏にiPhone4でiOS4.3用のアプリを開発していましたが、うまく機能していました。私は仕事を移している間、そのプロジェクトを後回しにしました。iOS 5のリリースに伴い、XcodeとiOS SDKの両方をそれぞれ4.2と5.0に更新し、開発用に5.0を実行する新しいiPodTouchも購入しました。

私のアプリはまだiPhone4.3シミュレーターで動作しますが(残念ながら、テストするiPhone 4はもうありません)、iPhone5.0シミュレーターとiPodTouchで一貫してクラッシュします。

サブビューをロードしようとしてメインに移動し、SIGABRTでクラッシュすると言うと、エラーが発生します。以下は、クラッシュが発生するコードのセグメントです。

-(IBAction) showView:(id) sender{   
    if (self.tViewController == nil) {
        self.tViewController = [[TViewController alloc] init];
    }

    [self.navigationController pushViewController:tViewController animated:YES];
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:.75];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft
                         forView:self.view
                         cache:YES];

    [self.view addSubview:tViewController.view];
    [UIView commitAnimations];
}

ステップスルーしてこの行に到達すると、次のようになります。

[self.view addSubview:tViewController.view];

クラッシュし、main.mにジャンプします。

int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}

そして、この行で受信されている「SIGABRT」を示しています。

int retVal = UIApplicationMain(argc, argv, nil, nil);

エラーは、何かが2回リリースされたことが原因であると読みました。しかし、私の「showView」関数では、どこでそれを行うことができたのかわかりません。addSubviewメソッドが私が知らないことをしない限り。

また、このエラーが4.3ではなく5.0で発生するのはなぜですか?

どんな助けでも大歓迎です。

4

1 に答える 1

1
-(IBAction) showView:(id) sender{   
    if (self.tViewController == nil) {
        self.tViewController = [[TViewController alloc] init];
    }

    [self.navigationController pushViewController:tViewController animated:YES];
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:.75];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft
                     forView:self.view
                     cache:YES];

    [self.view addSubview:tViewController.view];
    [UIView commitAnimations];
}

を使用してこのビューを既にプッシュしているのに、このコード行[self.navigationController pushViewController:tViewController animated:YES]を削除してメインビューに追加するのはなぜですか。[self.view addSubview:tViewController.view]

于 2011-10-17T05:10:17.927 に答える