Iphone 为什么tabView中的tab切换在显示和删除Objective C中的模式后不起作用
我制作了一个简单的应用程序,它由一个带有选项卡导航的主窗口组成,其中每个选项卡都有自己的导航控制器 我可以切换选项卡,并根据所选选项卡查看第一个视图或第二个视图 现在,我添加了一个新的窗口StartupView,它有自己的导航控制器startupNavigationController 在主窗口/应用程序的app delegate中,我确实呈现了如下启动窗口:Iphone 为什么tabView中的tab切换在显示和删除Objective C中的模式后不起作用,iphone,objective-c,cocoa-touch,ios4,Iphone,Objective C,Cocoa Touch,Ios4,我制作了一个简单的应用程序,它由一个带有选项卡导航的主窗口组成,其中每个选项卡都有自己的导航控制器 我可以切换选项卡,并根据所选选项卡查看第一个视图或第二个视图 现在,我添加了一个新的窗口StartupView,它有自己的导航控制器startupNavigationController 在主窗口/应用程序的app delegate中,我确实呈现了如下启动窗口: @implementation NavigationCrapAppDelegate @synthesize window=_windo
@implementation NavigationCrapAppDelegate
@synthesize window=_window;
@synthesize tabBarController=_tabBarController;
@synthesize firstTabNavigationController;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self.window addSubview:self.tabBarController.view];
[self.window makeKeyAndVisible];
StartupViewController *sv = [[StartupViewController alloc] init];
[[firstTabNavigationController topViewController] presentModalViewController:sv animated:NO];
[[firstTabNavigationController topViewController] dismissModalViewControllerAnimated:YES];
[sv release];
return YES;
}
在显示它之后,为了简单起见,我会立即删除它,通常这将在事件之后发生
现在,应用程序启动、显示和隐藏startupWindow,并使用tabnavigation再次显示底层主窗口。然而,有一个区别。在添加和删除模式启动窗口之前,我可以切换到另一个选项卡,现在当我切换选项卡时,应用程序将中止
我在main.c中得到消息EXC_BAD_ACCESS。我不知道它试图访问什么,尽管在此期间可能会意外释放什么
项目树的屏幕截图:
我使用bt命令获得以下回溯:
#0 0x00f2809f in objc_msgSend ()
#1 0x0290c1a7 in WebCore::failedToStartServiceErrorMessage ()
#2 0x0003d695 in +[UIWindow _hitTestToPoint:pathIndex:forEvent:] ()
#3 0x0001d709 in _UIApplicationHandleEvent ()
#4 0x00ffb992 in PurpleEventCallback ()
#5 0x00da3944 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
#6 0x00d03cf7 in __CFRunLoopDoSource1 ()
#7 0x00d00f83 in __CFRunLoopRun ()
#8 0x00d00840 in CFRunLoopRunSpecific ()
#9 0x00d00761 in CFRunLoopRunInMode ()
#10 0x00ffa1c4 in GSEventRunModal ()
#11 0x00ffa289 in GSEventRun ()
#12 0x00022c93 in UIApplicationMain ()
#13 0x00001e89 in main (argc=1, argv=0xbffff040) at main.m:14
项目文件:您的问题可能是您试图在绘制视图控制器之前将其关闭。在代码进入主事件循环(即退出方法后)之前,不会绘制任何内容。尝试使用以下命令拨打您的解雇电话:
[self performSelection:@selection(<myDismissMethod>) withObject:nil afterDelay:2.5];
myDismissmethod所做的就是调用dismissModalViewControllerAnimatedHmm有回溯吗?在bt命令崩溃后尝试使用它,但不告诉您原因,或者应该有更多的信息,或者如果您使用的是线程,请检查每个线程是否有错误。@herz我添加了回溯,不幸的是,我无法从中了解太多。让我惊讶的是,它指的是模式GSEventRunModal,而在主窗口中切换选项卡时不应再涉及模式。这里有一个objc_msgSend,这意味着您正试图向一个已解除分配的实例发送消息,但我无法真正告诉您它是什么。也许,只是也许,您需要在以模态方式呈现后立即释放StartupViewController,并让parentViewController在解除后执行保留和释放操作。你能试试并告诉我结果吗?@herz你的意思是不在解散后就发布它吗?@herz,我把项目文件作为zip文件上传。也许你可以看一看,这可能比描述问题更容易。我会在周末后试试,家里没有mac电脑。然而,在最初的应用程序中,模态在使用后被取消,它由三个页面组成,因此它是确定的。为了简单起见,我这样描述这个问题。我只是尝试了performSelector,我假设它增加了2.5秒的延迟,但它的行为是一样的。模态确实隐藏了,但正如在原始代码中一样,它在切换后面视图中的选项卡时崩溃。