Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.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/5/objective-c/24.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 从UINavigationController弹出视图控制器时出现问题_Iphone_Objective C_Iphone Sdk 3.0 - Fatal编程技术网

Iphone 从UINavigationController弹出视图控制器时出现问题

Iphone 从UINavigationController弹出视图控制器时出现问题,iphone,objective-c,iphone-sdk-3.0,Iphone,Objective C,Iphone Sdk 3.0,我在从UINavigation控制器弹出UIViewController时遇到问题,即使对导航的引用似乎是正确的,并且ViewController上的计数显示了正确的数字 我有一个UIAVController,它获取了它的第一个UIViewController集,然后nav控制器显示在模式视图中: workoutNavController.viewControllers = [NSArray arrayWithObject:manageWorkoutController]; [self pres

我在从UINavigation控制器弹出UIViewController时遇到问题,即使对导航的引用似乎是正确的,并且ViewController上的计数显示了正确的数字

我有一个UIAVController,它获取了它的第一个UIViewController集,然后nav控制器显示在模式视图中:

workoutNavController.viewControllers = [NSArray arrayWithObject:manageWorkoutController];
[self presentModalViewController:workoutNavController animated:YES];
第一个UIViewController(manageWorkoutController)有一个表视图,当触摸其中一个单元格时,第二个UIViewController被推到导航控制器上:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    switch (indexPath.row) {

        case 0:
            //do nothing no nav-view here
            break;

        //DIFFICULTY
        case 1:
            workoutDifficultyController.title = @"Workout Difficulty";
            [(UINavigationController *)self.parentViewController pushViewController:workoutDifficultyController 
                                                                           animated:YES];
            break;

        //DATE
        case 2:
            workoutDateController.title = @"Workout Date";
            [(UINavigationController *)self.parentViewController pushViewController:workoutDateController 
                                                                           animated:YES];
            break;

        default:
            break;

    }//end switch

}//end didSelectRowAtIndexPath
在第二个UIViewController(workoutDifficultyController)中,我在viewDidLoad方法中设置了一个Cancel and Save UIBarButtonItem,以便Cancel按钮覆盖导航栏上的默认后退按钮

- (void)viewDidLoad {

    UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelDifficulty:)];
    [self.navigationItem setLeftBarButtonItem:cancelButton];
    [cancelButton release];

    UIBarButtonItem *saveButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(saveDifficulty:)];
    [self.navigationItem setRightBarButtonItem:saveButton];
    [saveButton release];

    [super viewDidLoad];

}//end viewDidLoad
我的问题是,在Cancel方法中,我想将当前视图从导航控制器弹出并返回,我一直会遇到“EXEC\u BAD\u ACCESS”错误。方法如下:

-(IBAction)cancelDifficulty:(id)sender {
    [(UINavigationController *)self.parentViewController popViewControllerAnimated:YES];
}//cancelDifficulty

我尝试了将方法链接回实际拥有navController的类,以及使用popToViewController:Animated:。如果我使用NSLog打印出CancelDemobility方法中的ViewController计数,它会显示正确的数字,但如果我尝试与它交互,我要么获得EXEC_BAD_访问权限,要么什么也没有发生。

为什么不访问视图控制器的navigationController属性,与其将其parentViewController强制转换为UINavigationController(无论如何,这是一个坏主意)。

我将尝试以下方法,看看它是否有效:

-(IBAction)cancelDifficulty:(id)sender {
    [(UINavigationController *)self.navigationController popViewControllerAnimated:YES];
}//cancelDifficulty

可能是parentViewController不是一个真正的UINavigationController

如果我记录self.parentViewController,它就是一个UINavigationViewController,如果我记录了[self.parentViewController ViewController]的计数,会发生同样的情况有时EXEC\u BAD\u ACCESS表示您试图访问内存中已释放的某个内容。仔细检查是否未过早释放任何需要的对象。似乎是popViewControllerAnimated:方法引发了EXEC_BAD_访问。请参阅上面的注释,如果我不覆盖工具栏按钮项并使用库存功能,它仍然会失败。NSLog(@“VCs:%@,[(UINavigationController*)self.parentViewController视图控制器]);注销此项,因此我不确定为什么无法弹出一个:VCs:(,)如果我尝试使用self.navigationController,我会收到以下错误:-[CALayer retrieveValueForKey:]:由于未捕获的异常“NSInvalidArgumentException”,原因:'***-[CALayer retrieveValueForKey:]将无法识别的选择器发送到实例0x3B3900终止应用程序:未识别的选择器发送到实例0x3b3b900'此外,如果我完全删除viewDidLoad方法,使导航控制器具有开箱即用功能,则在点击“后退”按钮时,我仍然可以访问EXEC_BAD_。请尝试打开NSZombies,并查看是否有可能预释放对象。另外,还不清楚您是如何设置workoutNavController的,但我会使用pushViewController:animated:,而不是设置其ViewController数组。我认为NSZombies的方向是正确的,一开始似乎popViewControllerAnimated工作正常,但是,即将显示的视图的ViewWillAspect方法正在访问一个不再可用的对象。谢谢