ios:使用 modalTransitionsytle 属性导航到另一个屏幕,导致应用程序崩溃
Posted
技术标签:
【中文标题】ios:使用 modalTransitionsytle 属性导航到另一个屏幕,导致应用程序崩溃【英文标题】:ios: Navigation to another screen using modalTransitionsytle attribute, crashes the app 【发布时间】:2011-12-09 11:29:03 【问题描述】:我有导航界面,每次按下设置按钮时,我都会使用它弹出设置屏幕。
@interface Navigation : UINavigationController
-(void)popToMainMenuAnimated:(BOOL)animated;
//.m file
-(void)popToMainMenuAnimated:(BOOL)animated
UIViewController *element;
for(element in self.viewControllers)
if([element isKindOfClass:[MainSettingClass class]])
self.modalTransitionStyle = UIModalTransitionStylePartialCurl;
[self presentModalViewController:element animated:YES]
应用程序因以下异常而崩溃。
* 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“应用程序试图以模态方式呈现活动控制器。” * 首先抛出调用栈:
注意:这不是根屏幕,而是我的应用程序的第三个屏幕。
【问题讨论】:
【参考方案1】:根据您提供的调试日志,我通过搜索得到了一个原因:您之前推送的MainSettingClass
实例既不能再次推送到navigationController 上的数组,也不能以模态方式呈现。您应该创建一个新的 MainSettingClass 实例并呈现它,就像第二个代码 sn-p 一样。
HERE 是一个提到Application tried to present modally an active controller
的相关问题。 :)
-(void)popToMainMenuAnimated:(BOOL)animated
UIViewController *element;
for(element in self.viewControllers)
if([element isKindOfClass:[MainSettingClass class]])
self.modalTransitionStyle = UIModalTransitionStylePartialCurl;
[self presentModalViewController:element animated:YES];
break;
但为什么不是load
Main Menu
而不是pop
?
-(void)loadMainMenuAnimated:(BOOL)animated
MainSettingClass * mainMenuViewController = [[[MainSettingClass alloc] init] autoreleased];
[mainMenuViewController.view setFrame:CGRectMake(0.0f, 0.0f, 320.0f, 480.0f)];
// ...
self.modalTransitionStyle = UIModalTransitionStylePartialCurl;
[self presentModalViewController:mainMenuViewController animated:YES];
而且你展示的代码有一些错误:
self.modalTransitionStyle= UIModalTransitionStylePartialCurl;
[self popToViewController:element animated:YES];
self.modalTransitionStyle= UIModalTransitionStylePartialCurl;
如果你设置了这个,你需要使用
[self presentModalViewController:yourViewController animated:YES];
不是
[self popToViewController:element animated:YES];
【讨论】:
我按照建议进行了更改,但这导致我的应用程序崩溃。以前只有过渡属性没有被遵守,无论我选择什么风格,它总是以默认方式过渡。 使用 [self popToViewController:element animated:YES] 正确进行转换;但我希望转换不是默认的,而是 UIModalTransitionStylePartialCurl 的。当我尝试您的更改时: [self.modalTransitionStyle= UIModalTransitionStylePartialCurl; [自我presentModalViewController:元素动画:是];应用崩溃。 @RakeshSingh 我很抱歉我的错误。现在怎么样? 还是没有运气。我只想通过弹出视图使用。应用程序仍然因 BAD_MEMORY_EXCESS 而崩溃 @RakeshSingh BAD_MEMORY_EXCESS,你的意思是 EXC_BAD_ACCESS?也许您需要找出导致此崩溃的原因,请参阅THIS 答案以找出答案。 :)【参考方案2】:您选择并尝试呈现(模态)的“MainSettingsClass”UIViewController 似乎已经处于活动状态。如果您在此视图控制器之前可能已推送/呈现(理想情况下弹出/关闭)的位置放置代码,将会有所帮助。
这里有一个couple related 的问题可能对您有所帮助。
【讨论】:
以上是关于ios:使用 modalTransitionsytle 属性导航到另一个屏幕,导致应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章
使用 SmartFace.io 录制音频(Android - Ios)