Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 为什么tabView中的tab切换在显示和删除Objective C中的模式后不起作用_Iphone_Objective C_Cocoa Touch_Ios4 - Fatal编程技术网

Iphone 为什么tabView中的tab切换在显示和删除Objective C中的模式后不起作用

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

我制作了一个简单的应用程序,它由一个带有选项卡导航的主窗口组成,其中每个选项卡都有自己的导航控制器

我可以切换选项卡,并根据所选选项卡查看第一个视图或第二个视图

现在,我添加了一个新的窗口StartupView,它有自己的导航控制器startupNavigationController

在主窗口/应用程序的app delegate中,我确实呈现了如下启动窗口:

@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所做的就是调用dismissModalViewControllerAnimated

Hmm有回溯吗?在bt命令崩溃后尝试使用它,但不告诉您原因,或者应该有更多的信息,或者如果您使用的是线程,请检查每个线程是否有错误。@herz我添加了回溯,不幸的是,我无法从中了解太多。让我惊讶的是,它指的是模式GSEventRunModal,而在主窗口中切换选项卡时不应再涉及模式。这里有一个objc_msgSend,这意味着您正试图向一个已解除分配的实例发送消息,但我无法真正告诉您它是什么。也许,只是也许,您需要在以模态方式呈现后立即释放StartupViewController,并让parentViewController在解除后执行保留和释放操作。你能试试并告诉我结果吗?@herz你的意思是不在解散后就发布它吗?@herz,我把项目文件作为zip文件上传。也许你可以看一看,这可能比描述问题更容易。我会在周末后试试,家里没有mac电脑。然而,在最初的应用程序中,模态在使用后被取消,它由三个页面组成,因此它是确定的。为了简单起见,我这样描述这个问题。我只是尝试了performSelector,我假设它增加了2.5秒的延迟,但它的行为是一样的。模态确实隐藏了,但正如在原始代码中一样,它在切换后面视图中的选项卡时崩溃。