我撞到这个问题在哪里我的应用程序的获取 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_msgSends/tmp/,然后 continue 执行,它将跟踪所有的消息都发送的权利,直到崩溃。

我也面临同样的问题,我认为如果viewcontroller被释放使用[ViewController释放],但仍然使用图和由,时间如果你改变方向的应用程序的崩溃。

你必须弄清楚什么时候你应该释放viewcontroller[propably在退出].

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top