簡體   English   中英

iOS應用程序-試圖從圖庫中獲取iOS照片但出現錯誤

[英]iOS App - Trying to Get iOS photo from gallery but getting an error

我是iOS編碼的新手,所以提前致歉。 我知道這個話題已經被討論過很多次了(我已經搜索過),但是我似乎無法解決我的問題,這就是為什么我要發布。

我正在嘗試訪問iOS照片庫,但仍然出現兩個錯誤:

一種是“應用程序試圖在目標上展示一個無模式視圖控制器”。

編輯:上面的錯誤是通過在ChooseExsisting中初始化_picker來解決的,如注釋中所建議。

另一個

[CameraController ChooseExsiting:]:無法識別的選擇器已發送到實例0x157e11330'

我的代碼如下:

- (IBAction)ChooseExsiting {
UIImagePickerController *pickerController = [[UIImagePickerController alloc]
                                             init];
pickerController.delegate = self;
[self.picker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
[self presentViewController:_picker animated:YES completion:NULL]; }

我認為我的ChooseExsisting代碼不正確。 有人有什么建議嗎? 我將不勝感激。

在ChooseExisting方法中,將控制器實例化為局部變量,然后使用_picker屬性變量調用present,該變量可能為nil。 從局部變量顯示控制器,或者像TakePhoto方法一樣初始化屬性。

編輯:至於第二部分,例如,如果要將兩個IBAction連接到Storyboard中的Tap處理程序,則它們的方法簽名錯誤。 它們應如下所示:

- (IBAction) TakePhoto:(id)sender

- (IBAction) ChooseExsiting:(id)sender

將您的ChooseExisitng方法更改為以下一種:

- (IBAction)ChooseExsiting:(id) sender {
    UIImagePickerController *pickerController = [[UIImagePickerController alloc]
                                         init];
    pickerController.delegate = self;
    [pickerController setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
    [self presentViewController:pickerController animated:YES completion:NULL]; }

要么

- (IBAction)ChooseExsiting:(id) sender {
    self.picker = [[UIImagePickerController alloc]
                                         init];
    self.picker.delegate = self;
    [self.picker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
    [self presentViewController:self.picker animated:YES completion:NULL]; }
 You can try this . It work for me
 Follow below three steps1.First of all you need to add below delegate in .h file (UIImagePickerControllerDelegate,UIPickerViewDelegate)
 2.Add below three methods in your controller
 3. On button click call below methods
 here choose photo for open gallary. so on button click call choose photo method
 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
   CGSize newSize=CGSizeMake(150, 150);
   UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [[info objectForKey:UIImagePickerControllerEditedImage] drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();
   img_profile_pic.image = newImage;
   [self dismissViewControllerAnimated:YES completion:nil];
   isProfilePic=TRUE;
}
- (void)showImagePickerForSourceType:(UIImagePickerControllerSourceType)sourceType
{
    UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
    imagePickerController.allowsEditing = YES;
    imagePickerController.modalPresentationStyle = UIModalPresentationCurrentContext;
    imagePickerController.sourceType = sourceType;
    imagePickerController.delegate = self;
    imagePickerController = imagePickerController;
    [self presentViewController:imagePickerController animated:YES completion:nil];
 }

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


  -(void) takePhoto{
       [self showImagePickerForSourceType:UIImagePickerControllerSourceTypeCamera];
   }
  -(void) choosePhoto{
     [self showImagePickerForSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
   }

而不是做



    if ([UIImagePickerController isSourceTypeAvailable:!UIImagePickerControllerSourceTypeCamera]) {

    self.picker = [[UIImagePickerController alloc] init];
    self.picker.delegate = self;
    [self.picker setSourceType:UIImagePickerControllerSourceTypeCamera];
    [self presentViewController:_picker animated:YES completion:NULL];
    } }

你應該做這個



    if ([UIImagePickerController isSourceTypeAvailable:!UIImagePickerControllerSourceTypeCamera]) {
    if(!_picker){
    _picker = [[UIImagePickerController alloc] init];
    _picker.delegate = self;
    [_picker setSourceType:UIImagePickerControllerSourceTypeCamera];
    [self presentViewController:_picker animated:YES completion:NULL];

    }else{

    [self presentViewController:_picker animated:YES completion:NULL];

    }}}

您應該在提供_picker屬性之前對其進行初始化,現在,您正在嘗試初始化VC的本地屬性,或者還可以在代碼中提供self.picker而不是_picker。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM