2012-05-04 4 views
0

J'ai un problème avec mon application iPad créée avec MonoTouch. Mon application plante en appelant la méthode "TakePicture" Lines "parent.PresentModalViewController (sélecteur, true);", après avoir appelé la méthode "SelectPicture". Si j'appelle la méthode "TakePicture" à plusieurs reprises, je n'ai aucun problème. L'erreur renvoyée était: "NSInvalidArgumentException Reason: L'application a tenté de présenter un contrôleur de vue modal nul sur la cible.".Monotouch NSInvalidArgumentException Camera

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

Nous vous remercions de votre aide.

Répondre

1

Je suis résolu mon problème. Je retire cette ligne:

picker.Dispose();