我碰到這個問題,我的應用程序得到EXC_BAD_ACCESS
錯誤和阻塞/停止。我正在使用模擬器的「向左旋轉」&「向右旋轉」選項來模擬方向更改行爲。可能是這個錯誤的可能原因是什麼?由於我沒有得到有關錯誤的詳細信息,因此我無法追蹤它。iPhone開發 - 當我改變方向時,我的應用程序崩潰
我所有的控制器類有:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == UIInterfaceOrientationPortrait); // Return YES for supported orientations
}
任何想法,指針?謝謝。
但是我的代碼沒有調用[UIDevice setOrientation:]方法。
這是我得到的調試窗口跟蹤:
objc_msgSend
-[UIWindow _handleDeviceOrientationChange:]
_nsnote_callback
__CFXNotificationPost
_CFXNotificationPostNotification
-[NSNotificationCenter postNotificationName:object:userInfo:]
-[UIDevice setOrientation:]
-[UIApplication handleEvent:withNewEvent:]
_[UIApplication sendEvent:]
_UIApplicationHandleEvent
SendEvent
PurpleEventTimerCallBack
CFRunLoopRunSpecific
CFRunLookRunInMode
GSEventRunModel
GSEventRun
-[UIApplication _run]
UIApplicationMain
main
需要注意的是,當我的視圖包含一個標籤欄會出現錯誤。由於沒有人回覆,我想這不是一個常見問題,我找不到解決此問題的任何資源。
我可以以某種方式告訴我的應用程序以單向(人像)運行,並且不發送事件以改變方向。這可能會解決我的問題,但這是我正在尋找的替代品。
感謝保羅,您的評論是有幫助的,我是能夠解決這一問題,但有保留的觀點我並不需要存儲的成本。這裏發生了什麼事情:
我有一個視圖(視圖A),它打開另一個視圖(視圖B)。應用程序委託方法負責打開視圖A和視圖B.應用程序不會在視圖A上崩潰。我從窗口中刪除視圖A,並釋放其控制器對象,並將視圖B添加到窗口。我相信這是我做錯事的地方。你能幫我解開代碼嗎?
下面是釋放視圖以及開視圖B代碼:
- (void)openViewB {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:window cache:YES];
// Remove viewControllerA from the window's view
[window removeFromSuperview];
// !-- Commenting out this block fixes the issue --!
// Release memory wired for viewControllerA view
if(viewControllerA) {
[viewControllerA release];
viewControllerA = nil;
}
// We call window:addSubView to add the viewB to the main window.
// You can use this call to add other views as child views not only to windows
// but to other views as well. (UIWindow is a subclass of UIView).
[window addSubview:viewControllerB.view];
[UIView commitAnimations];
// Override point for customization after application launch
[window makeKeyAndVisible];
}
我開始用標籤欄應用程序模板的應用程序,並viewControllerB
是UITabBarController
類型。我肯定在這裏做錯了什麼。任何指針?
你爲什麼要調用`[window removeFromSuperview]`?你不應該調用`[viewControllerA.view removeFromSuperview]`? – 2009-10-08 22:01:00