2009-08-31 109 views
4

加载我的视图时,我似乎无法启动相机。我最终使用户必须找到并按下屏幕上的按钮才能加载摄像机(冗余)。我怎样才能做到这一点?码如下:如何在viewDidLoad上启动iPhone相机?

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 

    self.imgPicker = [[UIImagePickerController alloc] init]; 
    self.imgPicker.allowsImageEditing = NO; 
    self.imgPicker.delegate = self; 
    self.imgPicker.sourceType = UIImagePickerControllerSourceTypeCamera; 

    [super viewDidLoad]; 

    [self presentModalViewController:self.imgPicker animated:YES]; 

} 

UPDATE:
放置上述代码到-viewDidAppear:(BOOL)动画允许发射摄像机,但应用程序与最后例程被[UIWindowController transitionViewDidComplete应声随即: fromView:toView]; (如调试器引用)

回答

4

你应该在viewWillAppear:或viewDidAppear中做:如果第一个不起作用。试图在viewDidLoad中做到这一点是行不通的,因为这是在视图第一次创建之后调用的,并且该视图不是此时其他任何东西的子视图。据我了解,为了在自己上调用presentModalViewController,视图必须在UIWindow中显示。

我刚注意到的另一件事;你的代码泄漏内存取决于你如何声明你的imgPicker属性。如果它是用保留而不是分配声明的,那么除非你明确地将它释放两次,这个选择器总是存在于内存中。在这种情况下,您应该自动释放init'd对象,并将其分配给属性。

+0

谢谢凯夫拉尔!你从潜在的头痛中解救了我。 – RexOnRoids 2009-08-31 05:19:58

+0

更新: - (void)viewDidAppear:(布尔)动画在这种情况下工作。谢谢! – RexOnRoids 2009-08-31 05:21:16

+0

更新-2:相机显示,但我的应用程序退出:“错误EXC_BAD_ACCESS” – RexOnRoids 2009-08-31 05:26:42

0

看起来,它不会这样做,当你把调用当前模态视图在视图中加载。你可以尝试在调用[super viewDidload]之后有一个2秒的定时器,这会推动picker视图或类似的东西。

+1

计时器不会解决问题;从控制器中首次创建视图到即将显示视图之间的时间可能会超过两秒,在这种情况下,呼叫仍然不起作用。 – Kevlar 2009-08-31 05:00:49