1

iOS4 プロジェクトを ARC に変換しています。PTPasscodeViewController、AppPirater、Flurry などの外部ライブラリを使用しています。EXC_BAD_ACCESS に到達し続けます。これは、割り当て解除されたオブジェクトにメッセージを送信していることを意味します。Instruments を使用してトレースしていますが、解決方法がわかりません。SOの誰かが私を正しい方向に向けてくれることを願っています。

私の SettingsViewController は ARC なしでコンパイルされています (-fno-obj-arc)。これは、IouViewController と呼ばれるメインのルート ビュー コントローラーで初期化されます。

-(void)showSettings:(id)sender {
    SettingsViewController *infoView = [[SettingsViewController alloc] init];
    [infoView setIouArray:iouTableArray];
    [[self navigationController] pushViewController:infoView animated:YES];
}

計測器を実行すると、これが原因であることがわかります。

楽器画像1

楽器画像2

それで、画像 2 から、リリースが「main.m」からのものであることがわかりますか??? main.m の autorelease プールと関係があると思います。そのため、ARC に変換する際に犯した「間違い」の 1 つは、main.m を ARC 対応の新しいプロジェクトのものと同じに変更したことです。それが違いを生むかどうかはわかりませんが、他のEXC_BAD_ACCESSの問題があり、それを行うことでうまくいきました。

参考までに、ここに私のmain.mがあります:

int main(int argc, char *argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([IouApp2AppDelegate class]));
    }
}

補足として、クラッシュすると、「Thread 1: signal SIGKILL」というメッセージで main.m にジャンプします。

SOなしで何をするかわかりません。コミュニティからのすべての助けに感謝します。

更新 1:SettingsViewController に ARC を使用しようとすると、扱いにくいエラーが発生します。これは一例です:

            // passcode is correct, direct to PasscodeSettingsViewController

            // self retain, autorelease might be needed so that you do not look access to where the navigationController is since we pop one
            [[self retain] autorelease];

            // if you set popViewControllerAnimated:YES, weird title things happen. DO NOT MESS!!!
            [[self navigationController] popViewControllerAnimated:NO];

このコード スニペットは、PTPasscodeViewController サンプル コードベースからのものです。ARCを使用すると、エラーが発生しました:

[rewriter] it is not safe to remove an unused 'autorelease' message; its receiver may be destroyed immediately
4

1 に答える 1

0

プロジェクトをARCに変換する場合は、すべてのコードでARCを有効にする必要がありますautoreleaseXcodeは、、、、などの呼び出しを行っているすべての場所でエラーを発生させretainますrelease。ビルド、エラーの修正、ビルド、エラーの修正...ビルドが成功するまで繰り返します。使用しているサードパーティのコードについては、ARCを無効にする必要があります。参照しているサードパーティのコンパイル済みライブラリについては、通常どおりに使用できるはずです。

移行の詳細については、こちらをご覧ください。

于 2012-10-02T19:02:39.873 に答える