快照未呈现的视图会导致xamarin.ios7中出现空快照

时间:2014-01-20 15:24:29

标签: ios7 xamarin.ios

当我从相机捕获图像时,它在ios7中的控制台上出错。我首先尝试不在代码中添加Thread.sleep(3000),但这也无法正常工作。

完整错误: 快照未呈现的视图会导致空快照。确保在屏幕更新后快照或快照之前,您的视图至少呈现过一次。

代码:

public override void ViewDidLoad ()
    {
        base.ViewDidLoad ();

        // Perform any additional setup after loading the view, typically from a nib.           

        PictureFromCameraButton.TouchUpInside += PictureFromCameraButton_Click;

    }

private void PictureFromCameraButton_Click (object sender, EventArgs e)
    {
        try {
            Thread.Sleep (4000);                
                ImagePickerController.SetSourceType(UIImagePickerControllerSourceType.Camera);
    this.PresentViewController (ImagePickerController, true, null);


        } catch (NotSupportedException exception) {
            //Logging Exception in Flurry
            FA.Flurry.LogError(exception.GetType().Name,exception.Message,
                               new NSError(NSError.CocoaErrorDomain,3584));

            BeginInvokeOnMainThread (() => {
                UIAlertView ErrorAlert = new UIAlertView ("Device unsupported", "Your device does not support this feature",
                                                         new UIAlertViewDelegate (), "OK");
                ErrorAlert.Show ();
            });
        } catch (Exception ex) {
            //Logging Exception in Flurry
            FA.Flurry.LogError(ex.GetType().Name,ex.Message,
                               new NSError(NSError.CocoaErrorDomain,3584));
            this.ShowErrorInProcessingAlertView ();
        }
    }

3 个答案:

答案 0 :(得分:3)

要解决iOS 7中的这个问题,这就解决了我的错误。

当我提出UIImagePickerController时我称之为imagePickerController

请勿使用 nil NULL 。相反,我使用下面的代码,打开相机时不再出现错误。

[self presentViewController:imagePickerController animated:YES completion:^{....}];

答案 1 :(得分:0)

这有点像黑客,但有时你需要在生命周期的某个时间初始化某些东西,以达到交互原因或其他原因。所以我所做的只是在它所在的视图上0.1秒之后发送它似乎工作正常。进一步了解这一点。

    double delayInSeconds = 0.1;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
     // Show camera view controller.
[self presentViewController:imagePickerController animated:YES completion:nil];


});

希望这有助于有人找到更好的解决方案。

答案 2 :(得分:-1)

快照未呈现的视图会导致空快照出现相同的错误。

这绝对是一个错误,您也可以在Apple开发者论坛中找到它。

我试图在堆栈溢出时使用很多其他答案来避免此错误,但无法解决此问题。然而,使用这个,我可以一些如何没有得到这个错误,我不会称这是一个修复,但尝试一下,让我知道它是否已修复该问题。 使用主队列中的Grand Central Dispatch async关闭视图控制器为我修复了问题。

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

// Code to handle the image data 

dispatch_async(dispatch_get_main_queue(), ^{
[self dismissViewControllerAnimated:YES completion:nil];
});
}
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
dispatch_async(dispatch_get_main_queue(), ^{
[self dismissViewControllerAnimated:YES completion:nil];

});

}