4

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

// 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];

}

更新:
将上述代码放入 -viewDidAppear:(BOOL)animated 允许启动相机,但应用程序随后立即崩溃,最后一个例程是 [UIWindowController transitionViewDidComplete:fromView:toView]; (由 Debugger 引用)

4

2 回答 2

4

如果第一个不起作用,您应该在 viewWillAppear: 或 viewDidAppear: 中执行此操作。尝试在 viewDidLoad 中执行它是行不通的,因为它是在首次创建视图后调用的,并且该视图在那时不是其他任何东西的子视图。据我了解,为了在 self 上调用 presentModalViewController,视图必须在某种程度上显示在 UIWindow 中。

我刚刚注意到的另一件事;根据您声明 imgPicker 属性的方式,您的代码会泄漏内存。如果它是用retain而不是assign声明的,那么除非你在某个地方明确释放它两次,否则选择器将始终存在于内存中。在这种情况下,您应该在将初始化对象分配给属性时自动释放它。

于 2009-08-31T04:59:46.053 回答
0

似乎当您在 view did load 中调用 present modal view 时它不会这样做。您可以尝试在调用 [super viewDidload] 后设置一个 2 秒的计时器,将选取器视图推入或类似的东西。

于 2009-08-31T04:47:53.020 回答