2009-08-31 6 views
4

Я не могу запустить камеру при загрузке моего представления. В конечном итоге пользователь должен найти и нажать кнопку на экране, чтобы загрузить камеру (избыточность). Как я могу это сделать? Код следующим образом:Как запустить iPhone Camera на viewDidLoad?

// 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]; (так процитировано Debugger)

ответ

4

Вы должны сделать это в viewWillAppear :, или viewDidAppear: если первое не работает. пытаясь сделать это в viewDidLoad, это не сработает, потому что он вызывается после того, как сначала создается представление, и представление не является подходом к чему-либо еще в этой точке. Насколько я понимаю, для вызова currentModalViewController на себя, представление должно на некотором уровне отображаться в UIWindow.

Еще одна вещь, которую я только что заметил; ваш код пропускает память в зависимости от того, как вы объявляете свое свойство imgPicker. если он объявлен с сохранением вместо назначения, то, если вы явно не выпустите его дважды где-нибудь, этот сборщик всегда будет существовать в памяти. Вы должны автоопределить объект init'd, когда вы назначаете его в этом случае.

+0

спасибо Кевлару! Ты спас меня от потенциальной головной боли. – RexOnRoids

+0

UPDATE: - (void) viewDidAppear: (BOOL) анимированный работал в этом случае. Благодаря! – RexOnRoids

+0

UPDATE-2: Камера показывает, но мое приложение выходит с: «Ошибка EXC_BAD_ACCESS» – RexOnRoids

0

Похоже, что это не так, когда вы положили вызов, чтобы представить модальный вид в поле зрения, он загрузился. Вы можете попробовать иметь 2-секундный таймер после вызова [super viewDidload], который подталкивает представление выбора или что-то в этом роде.

+1

Таймер не решит проблему; это может быть больше двух секунд между тем, когда представление сначала создается в контроллере и когда оно будет отображаться, и в этом случае вызов все равно не будет работать. – Kevlar