我创建了3个视图。 第一个视图是家,第二个是库存,第三个是叠加视图。 现在从主屏幕使用pushviewcontroller,我正在导航到清单视图屏幕。 在库存视图中,我有一个捕获按钮。捕获按钮将在overlayview上打开相机。 现在的问题是在overlayview中有一个叫做后退按钮的按钮,当我点击这个按钮时我想要导航到主屏幕,但为此我需要先关闭相机。这怎么可能?
清单视图中的捕获按钮
-(IBAction) btnCapture:(id) sender
{
@try
{
[self showImagePicker:UIImagePickerControllerSourceTypeCamera];
}
@catch (NSException *exception)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No Camera" message:@"Camera is not available " delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alert show];
[alert release];
}
}
在OverlayView后退按钮事件:
-(IBAction)btnBack:(id)sender
{
app.navcntr=1;
[self.delegate didFinishWithCamera];
[self dismissModalViewControllerAnimated:YES];
}
并在清单视图中查看viewWillAppear
-(void) viewWillAppear:(BOOL)animated
{
if(app.navcntr ==1)
{
[self.navigationController popToRootViewControllerAnimated:YES];
}
app.navcntr=0;
}
问题是它正在导航到主屏幕但是应用程序崩溃了。 怎么解决?
感谢。
答案 0 :(得分:2)
我认为您试图两次关闭相机视图。我的意思是didFinishWithCamera
方法会解雇它。删除第[self dismissModalViewControllerAnimated:YES];
行
-(IBAction)btnBack:(id)sender
{
app.navcntr=1;
[self.delegate didFinishWithCamera];
}
<强> EDITED 强>
当您不在屏幕上时(“将出现”),您不应该执行动画。
将您的代码写在viewDidAppear
中
-(void) viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
if(app.navcntr ==1)
{
[self.navigationController popToRootViewControllerAnimated:YES];
}
app.navcntr=0;
}
答案 1 :(得分:0)
您需要从拥有UIImagePickerController的控制器中解除模态视图控制器。
-(IBAction)whilePoppingBack:(id)sender{
[controllerWhichContainsPicker dismissModalViewControllerAnimated:YES];
}
//完成后,您可以通过popToRootViewController方法愉快地导航到主视图控制器。
PS注意:找到controllerWhichContainsPicker是另一回事,这取决于你基于你需要首先解雇它的视图层次结构,你需要做其他事情,如导航和其他视图事物。
//另一件事是我怀疑是一些内存泄漏(正如你在这里提到的: wait_fences:未能收到回复:10004003 )。尝试运行仪器工具或NSZombie或NSMallocGaurd启用并尝试找出泄漏的位置,如果上面的代码似乎没有解决问题。
如果你能够摆脱它,请告诉我!