dismissModalViewControllerを呼び出すと、間欠的にEXC_BAD_ACCESが発生します。iOS dismissModalViewControllerの結果はEXC_BAD_ACCESS
間欠性は、特定の実行ではなく特定のビルドに関連しています。つまり、実行可能ファイルがコンパイルされている場合、呼び出しは一貫して成功するか、一貫して失敗します。
ビルド間でコードが変更されているかどうかには依存していないようです。
iOS 5.1搭載のiPhone 5.1シミュレータとiPod touch 4th genを使用しています。この現象は、シミュレートされたデバイスと物理デバイスの両方に存在します
これまでに見たことがありますか?私たちはウィットの終わりにいる。
はここでどこモーダルビューコントローラを提示しますだの両方だけでなく、それは却下されます。ここで
PaymentStack* paymentStack =
[[PaymentStack alloc] initWithOrder:[anOrderManager thisOrder] locationState:[appData locationState]
successBlock:^{
//Push the current order on the history list
[[appData ordersHistory] addObject:[anOrderManager thisOrder]];
if ([[anOrderManager thisOrder] isEffectivelyEqual:[anOrderManager thisOrder]])
{
//Allocate a new order
[anOrderManager setOrder:[[Order alloc] init]];
}
}
completionBlock:^{
[self dismissViewControllerAnimated:YES
completion:^{
NSLog(@"Complete.");
}];
}
cancellationBlock:^{
[self dismissViewControllerAnimated:YES
completion:^{
NSLog(@"Cancellation.");
}];
}];
[self presentModalViewController:[paymentStack navigationController] animated:YES];
は、ここでスタックトレースです:
#0 0x00d659ab in -[UIWindowController transition:fromViewController:toViewController:target:didEndSelector:]()
#1 0x00b4ea9c in -[UIViewController _dismissViewControllerWithTransition:from:completion:]()
#2 0x00b4df91 in -[UIViewController dismissViewControllerWithTransition:completion:]()
#3 0x00b4ec81 in -[UIViewController dismissViewControllerAnimated:completion:]()
#4 0x00071135 in __35-[MasterViewController placeOrder:]_block_invoke_0186 at /Users/jake/Documents/Avocado/AvocadoTest1.0/MasterViewController.m:258
#5 0x000515c0 in __91-[PaymentStack initWithOrder:locationState:successBlock:completionBlock:cancellationBlock:]_block_invoke_0()
#6 0x000545c8 in __27-[PaymentStack showSuccess]_block_invoke_0230()
#7 0x000558cc in -[PaymentCompleteViewController done]()
#8 0x01a47e99 in -[NSObject performSelector:withObject:withObject:]()
#9 0x00a8214e in -[UIApplication sendAction:to:from:forEvent:]()
#10 0x00cc0a0e in -[UIBarButtonItem(UIInternal) _sendAction:withEvent:]()
#11 0x01a47e99 in -[NSObject performSelector:withObject:withObject:]()
#12 0x00a8214e in -[UIApplication sendAction:to:from:forEvent:]()
#13 0x00a820e6 in -[UIApplication sendAction:toTarget:fromSender:forEvent:]()
#14 0x00b28ade in -[UIControl sendAction:to:forEvent:]()
#15 0x00b28fa7 in -[UIControl(Internal) _sendActionsForEvents:withEvent:]()
#16 0x00b28266 in -[UIControl touchesEnded:withEvent:]()
#17 0x00aa73c0 in -[UIWindow _sendTouchesForEvent:]()
#18 0x00aa75e6 in -[UIWindow sendEvent:]()
#19 0x00a8ddc4 in -[UIApplication sendEvent:]()
#20 0x00a81634 in _UIApplicationHandleEvent()
#21 0x03dd9ef5 in PurpleEventCallback()
#22 0x01a1a195 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__()
#23 0x0197eff2 in __CFRunLoopDoSource1()
#24 0x0197d8da in __CFRunLoopRun()
#25 0x0197cd84 in CFRunLoopRunSpecific()
#26 0x0197cc9b in CFRunLoopRunInMode()
#27 0x03dd87d8 in GSEventRunModal()
#28 0x03dd888a in GSEventRun()
#29 0x00a7f626 in UIApplicationMain()
#30 0x000025ed in main at /Users/jake/Documents/Avocado/AvocadoTest1.0/AvocadoTest1/main.m:16
私はこれをフォーマットすることができ、より良い方法があればあなたのために、私に知らせてください。ブロック内
[self dismissViewControllerAnimated:YES
completion:^{
NSLog(@"Complete.");
}];
とのようなものを実行します:
あなたのコードを表示してください。 – WrightsCS
さて、私はあなたのためにそれを投稿するつもりです。 – jknielse
スタックトレースを表示してください。ゾンビやスタティックアナライザーでプロファイラを実行しようとしましたか? –