私は夏に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で発生するのはなぜですか?
どんな助けでも大歓迎です。