0

我使用 MonoTouch 创建的 iPad 应用程序有问题。在调用方法“SelectPicture”之后,我的应用程序通过调用方法“TakePicture” Lines “parent.PresentModalViewController (picker, true);”而崩溃。如果我反复调用方法“TakePicture”,我没有问题。

返回的错误是:“NSInvalidArgumentException 原因:应用程序试图在目标上呈现一个 nil 模态视图控制器。”。

public static class Camera
{
    static UIImagePickerController picker;
    static Action<NSDictionary> _callback;
    static UIPopoverController popover;

    static void Init ()
    {
        if (picker != null)
            return;

        picker = new UIImagePickerController ();

        picker.Delegate = new CameraDelegate ();
    }

    public static void TakePicture (UIViewController parent, Action<NSDictionary> callback)
    {
        Init ();
        picker.SourceType = UIImagePickerControllerSourceType.Camera;
        _callback = callback;                           
        Console.WriteLine("Controller TEST");
        parent.PresentModalViewController (picker, true);
    }

    public static void SelectPicture (UIViewController parent, Action<NSDictionary> callback)
    {
        if(Utils.isIpad()){

            picker = new UIImagePickerController();

            popover = new UIPopoverController(picker);
            picker.Delegate = new CameraDelegate();
            _callback = callback;
            picker.SourceType = UIImagePickerControllerSourceType.PhotoLibrary;
            picker.ContentSizeForViewInPopover = new SizeF(parent.View.Frame.Width,parent.View.Frame.Height);

            if(popover != null)
                popover.PresentFromRect(new Rectangle(0,0,1000,1),
                                        parent.View,UIPopoverArrowDirection.Any,true);


        }else{

            Init ();
            picker.SourceType = UIImagePickerControllerSourceType.PhotoLibrary;
            _callback = callback;           
            parent.PresentModalViewController (picker, true);
        }
    }


    class CameraDelegate : UIImagePickerControllerDelegate {
        public override void FinishedPickingMedia (UIImagePickerController picker, NSDictionary info)
        {
            var cb = _callback;
            _callback = null;
            picker.DismissModalViewControllerAnimated (true);
            cb (info);
            if(popover != null && popover.PopoverVisible){
                popover.Dismiss(true);                                  
                popover.Dispose();
                Console.WriteLine("DISPOSE");
            }
            picker.Dispose();   
        }
    }
}

感谢您的帮助。

4

1 回答 1

1

我解决了我的问题。我要删除这一行:

 picker.Dispose();
于 2012-05-07T08:02:58.770 回答