2

我正在尝试在我的 iPhone 应用程序中实现实时摄像头功能,但遇到了麻烦。基本上,它的结构是这样的:我提供了一个 UINavigationController,用户可以在其中导航到带有表格视图和(在选择一个时)详细视图的图像。

然后他们可以单击一个按钮并用相机拍摄一张新照片。理想情况下,应该发生的是,在拍照或取消后,他们会返回到再次列出图像的导航根目录。为此,我在我的主要细节视图控制器中实现 UIImagePickerController 委托。

除了最后一点之外,所有这些都实现得很好 - 我可以访问照片等,但是当尝试返回第一个列表时 - 使用popToRootViewControllerAnimated - 我得到一个EXC_BAD_ACCESS错误。这是相关代码的简化版本(didFinishPickingMediaWithInfo...imagePickerControllerDidCancel工作方式相同):

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    // Do some image processing stuff here...

    [picker dismissModalViewControllerAnimated:YES];
    [picker release];

    [self.navigationController popToRootViewControllerAnimated:YES];    
}

注释掉最后一行使其工作,但随后它只是返回到带有原始照片的详细视图,而不是列表。

任何人?

更新:我之前忽略的一个细节......事实上,流行音乐似乎在一定程度上起作用。相机选择器被关闭并返回列表。但是,那是应用程序死机的时候(选定的表格单元格仍然是蓝色的,用户之前从那里点击过)。我也尝试使用popViewControllerAnimated完全相同的结果。

4

3 回答 3

4

希望这对你来说还不算太晚。今晚我遇到了同样的问题,我用头撞了我的 MBP 大约 30 分钟,然后我才开始有点创意。

我找到了两种方法来完成这项工作。两者都不是直观的,但你去吧。基本上,似乎问题可能是由于您在“关闭”动画完成之前在导航控制器上调用“弹出”这一事实引起的。

我发现如果我将动画布尔值设置为“否”,那么它就可以工作了。

例如

[picker dismissModalViewControllerAnimated:**NO**];

另一种选择是创建一个实际调用“pop”函数的第二个方法,并使用具有短偏移量的计时器调用它。足以让关闭动画运行。

例如

-(void)popMe {
    [self.navigationController popToRootViewControllerAnimated:YES];
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    [picker dismissModalViewControllerAnimated:YES];
    [picker release];

    [self performSelector:@selector(popMe) withObject:nil afterDelay:0.1];   
}

那个时机对我有用,你可能需要调整。

希望有帮助!

  • 安德鲁
于 2009-10-01T01:13:56.107 回答
1

你的问题是 [picker dismissModelViewController] 和 [picker release] 我相信......你不需要释放选择器,当你解除我相信的模态视图控制器时它会为你释放(你没有从我做的正确可以看到)...或者它的引用计数为 0 并且不应该被释放,无论哪种方式我记得做这样的事情并让它崩溃,因为我释放了选择器...我还注意到你有选择器关闭模态视图控制器,你确定这是你想要做的吗?不是 [self dismissModalViewController] 或者您将视图推送到哪个 ViewController 上?

于 2009-08-19T15:27:54.530 回答
1

答案:
使用这个:[self.navigationControllerdismissModalViewControllerAnimated:YES]; 代码而不是 [picker dismissModalViewControllerAnimated:YES];
现在,您可以从代码中删除这一行: [self.navigationController popToRootViewControllerAnimated:YES];

于 2009-08-19T16:06:25.983 回答