题
我撞到这个问题在哪里我的应用程序的获取 EXC_BAD_ACCESS
错误和被堵塞/停止。我使用的"旋转左"&"右转"选择的模拟器模拟的方向变化的行为。什么可能的原因可能为这个错误?因为我没有收到有关错误的详细信息,我可以追踪不到。
我所有的控制器类别有:
- (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
注意,会出现错误时我认为包含一个标签条。由于没有一个是在回答我猜这不是一个普遍的问题,我找不到任何资源解决这一问题。
我可以以某种方式告诉我应用程序运行在单向的(纵向的),并没有发送活动的方向变化。?这可能会解决我的问题,但这是备用的,我要找的。
谢谢保罗,你的评论是有帮助的,和我能够解决的问题,但是费用的保留记忆的看我不需要。这里发生了什么:
我有一个观点(图一)这打开另一种观点(图B)。应委托方法负责打开这两个图A和图B。应用程序不会崩溃的图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
.我肯定做错了什么在这里。任何指点?
解决方案
这是不常见的崩溃,在系统图书馆的代码,由于你的东西没有设置了相当的权利。这可能是你的UIWindow或其内容的图或图控制的实例是不保留的或得到释放。
这shouldrotate方法不会帮助如果你控制不是仍然左右。
rpetrich的建议可能仍然是有用的,以确定其目得到了释放。
对于特别棘手的问题,可以添加的释放、保留和dealloc的方法(日志,并呼吁超级)对嫌疑人类的你看到什么释放。日志的-retaincount跟踪(我只能用这个用于诊断目的,不存管理中,运费应用程序).
其他提示
设置一个断点上 -[UIDevice setOrientation:]
和步骤,通过你的代码在调试器。
使调试更加容易,你可以的类型 call (void)instrumentObjcMessageSends(YES)
正在调试器控制台开始记录 objc_msgSend
s/tmp/,然后 continue
执行,它将跟踪所有的消息都发送的权利,直到崩溃。
我也面临同样的问题,我认为如果viewcontroller被释放使用[ViewController释放],但仍然使用图和由,时间如果你改变方向的应用程序的崩溃。
你必须弄清楚什么时候你应该释放viewcontroller[propably在退出].