我想按順序顯示多個模態視圖(例如,從圖像選擇器中選擇圖片後顯示確認頁面)。我的問題是,立即解僱和在隨後的步驟中呈現的動畫總是會以EXC_BAD_ACCESS
崩潰應用程序。多模態視圖轉換崩潰應用程序
我假設問題是CoreAnimation
沒有區分這兩個轉換並且無法正確檢測到第一個是否已經結束。
到目前爲止,我的工作是引入一段似乎解決問題的延遲。不過,我認爲這會使代碼有點脆弱。是否有另一種解決方法?
這是一個UIKit中的錯誤,我應該提交一個錯誤報告嗎?
示例代碼
這裏是重現崩潰一個簡單的例子:
下面的類作爲主控制器的實現創建一個新的基於視圖的項目
當呈現圖像選擇器視圖時點擊'取消'
預期行爲:由於後續調用viewDidAppear
,拾取器視圖被解散並再次呈現。
實際行爲:它與下面呈現的堆棧跟蹤崩潰。
代碼:
#import "SampleViewController.h"
@implementation SampleViewController
- (void)showModal {
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
[self presentModalViewController:picker animated:YES];
// [picker release];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self showModal]; // this line crashes the app
// the following works as desired
// [self performSelector:@selector(showModal) withObject:nil afterDelay:1];
}
@end
崩潰堆棧跟蹤:
#0 0x30b43212 in -[UIWindowController transitionViewDidComplete:fromView:toView:] #1 0x3095828e in -[UITransitionView notifyDidCompleteTransition:] #2 0x3091af0d in -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] #3 0x3091ad7c in -[UIViewAnimationState animationDidStop:finished:] #4 0x00b54331 in run_animation_callbacks #5 0x00b54109 in CA::timer_callback #6 0x302454a0 in CFRunLoopRunSpecific #7 0x30244628 in CFRunLoopRunInMode #8 0x32044c31 in GSEventRunModal #9 0x32044cf6 in GSEventRun #10 0x309021ee in UIApplicationMain #11 0x00002794 in main at main.m:14
使用0.0作爲延遲解決了問題!謝謝! – notnoop 2009-07-23 16:58:44