在应用程序的初始化过程中,我自然有一些关键的事情需要完成才能让应用程序运行。例如,在这种情况下,我需要获取AVCaptureDevice
后置摄像头的指针。
因此,如果它失败了(它永远不应该,但你永远不知道),我想UIAlertView
只显示一个选项,“再试一次”。当用户选择此项时,应用程序将尝试AVCaptureDevice
再次获取。
问题是我需要等待用户在继续之前按“重试”,但UIAlertView
不是模态的。
如果只有一段这样的代码,我可以通过UIAlertViewDelegate
回调处理它。但是由于会有多个像这样的关键初始化部分,我看不出如何使用回调而不会使事情变得非常混乱。
有没有一种优雅的方法来处理这个?
编辑:一些代码:
- (void)setup
{
NSError *error = nil;
// get all the video devices. (this should be the back camera and the front camera.)
NSArray *videoDevices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
AVCaptureDevice *backVideoDevice;
// find the back camera.
do
{
for (AVCaptureDevice *videoDevice in videoDevices)
{
if (videoDevice.position == AVCaptureDevicePositionBack)
{
backVideoDevice = videoDevice;
break;
}
}
if (backVideoDevice == nil)
{
// display UIAlertView???
}
} while (backVideoDevice == nil);
// if no back camera was found, then we can't continue.
AVCaptureDeviceInput *videoDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:backVideoDevice error:&error];
AVCaptureStillImageOutput *stillImageOutput = [AVCaptureStillImageOutput new];
AVCaptureSession *captureSession = [AVCaptureSession new];
if ([captureSession canAddInput:videoDeviceInput])
{
[captureSession addInput:videoDeviceInput];
}
if ([captureSession canAddOutput:stillImageOutput])
{
[captureSession addOutput:stillImageOutput];
}
// etc, etc.
}
大多数步骤都需要检查它们是否成功,就像第一个一样。