2012-05-04 2 views
0

У меня проблема с моим приложением iPad, созданным с помощью MonoTouch. Ошибка моего приложения, вызвав метод «TakePicture» Lines «parent.PresentModalViewController (picker, true);», после вызова метода «SelectPicture». Если я неоднократно вызываю метод «TakePicture», у меня нет проблем.Monotouch NSInvalidArgumentException Camera

Ошибка получена: «NSInvalidArgumentException Причина: Приложение попыталось представить новый контроллер модального представления на цель».

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(); 
     } 
    } 
} 

Благодарим за помощь.

ответ

1

Я решил свою проблему. Я удаляю эту строку:

picker.Dispose(); 
Смежные вопросы