【问题标题】:UIImagePickerControllerDelegate not responding properlyUIImagePickerControllerDelegate 没有正确响应
【发布时间】:2011-05-20 18:29:32
【问题描述】:

我在 iPhone 3Gs 上使用 iOS 4.2.1 中的 UIImagePickerController。我以前使用过不推荐使用的方法

- (void)imagePickerController: didFinishPickingImage: editingInfo:

没有问题。我有另一个应用程序在另一个应用程序中使用了新的 didFinishPickingMediaWithInfo API,一旦选择了媒体,选择器就永远不会调用该方法。

//MyViewController.h
    @interface MyViewController : UIViewController < UIImagePickerControllerDelegate, UINavigationControllerDelegate>

//MyViewController.m

    if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
        UIImagePickerController *picker =  [[UIImagePickerController new] autorelease];
        picker.delegate = self;
        picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        picker.mediaTypes =  [[NSArray alloc] initWithObjects: (NSString *) kUTTypeMovie, nil];
        picker.videoQuality = UIImagePickerControllerQualityTypeHigh;
        picker.allowsEditing = NO;
        [self presentModalViewController:picker animated:TRUE];
    }

    - (void)imagePickerController:(UIImagePickerController *)picker imagePickerController:didFinishPickingMediaWithInfo:(NSDictionary *)editingInfo{
        //**NEVER CALLED**
    }

【问题讨论】:

  • 那个代码块被调用了吗?我的意思是——[UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary] 是否返回YES

标签: iphone ipad ios sdk ios4


【解决方案1】:

你有

- (void)imagePickerController:(UIImagePickerController *)picker imagePickerController:didFinishPickingMediaWithInfo:(NSDictionary *)editingInfo

你可能想要的地方

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

【讨论】:

    【解决方案2】:

    你有这个: - (void)imagePickerController:(UIImagePickerController *)picker imagePickerController:didFinishPickingMediaWithInfo:(NSDictionary *)editingInfo

    看起来您重复了该方法的“imagePickerController:”部分。

    【讨论】:

      【解决方案3】:

      将选择器放在自动释放池中可能是您​​的问题——它可能不会停留足够长的时间来调用它的委托。改为保留它:

      UIImagePickerController *picker = [[UIImagePickerController alloc] init];
      

      然后在委托中你可以释放它:

      [picker dismissModalViewControllerAnimated:YES];
      [picker release];
      

      【讨论】:

        【解决方案4】:

        可能是这一行:

        if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
        

        返回 false。如果用户的照片库为空,则会发生这种情况;例如,在 iPhone 模拟器上就是这样。

        编辑:正如其他示例所示,您还输入了错误的委托方法。应该是:

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

        【讨论】:

          【解决方案5】:

          这是我用来在 3g 上通过 iOS 4.2 将视频上传到 web 服务的程序

          -(void)uploadeVideoClicked{
              UIImagePickerController *ipc = [[UIImagePickerController alloc] init];
              ipc.sourceType =  UIImagePickerControllerSourceTypePhotoLibrary;
              ipc.allowsEditing=NO;
              ipc.videoQuality = UIImagePickerControllerQualityTypeMedium;
              ipc.mediaTypes =[UIImagePickerController availableMediaTypesForSourceType:ipc.sourceType];     
              ipc.mediaTypes = [NSArray arrayWithObject:(NSString *)kUTTypeMovie];
              ipc.delegate = self;
              [self presentModalViewController:ipc animated:YES];
          }
          
          - (void)imagePickerController:(UIImagePickerController *)picker  didFinishPickingMediaWithInfo:(NSDictionary *)info
          
          {
              NSMutableDictionary *infoDict = [[NSMutableDictionary alloc]init];
              NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
              if ([mediaType isEqualToString:@"public.image"]){
                  UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"" message:@"You Select a image Please select Movie" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
                  [myAlertView show];
                  [myAlertView release];
              } else if ([mediaType isEqualToString:@"public.movie"]){
                  NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL];
                  mAppDelegate.uploadType = @"Video";
                  NSData *webData = [NSData dataWithContentsOfURL:videoURL];
                  [infoDict setValue:webData forKey:@"VideoUrl"];
                  [infoDict setValue:[[mAppDelegate.userInfoArray objectAtIndex:1]valueForKey:@"user_id"] forKey:@"user_id"];
                  //Call webService to upload video ;
              }
              [picker dismissModalViewControllerAnimated:YES];
              [infoDict release];
          }
          

          【讨论】:

            猜你喜欢
            • 2016-10-13
            • 2018-09-01
            • 1970-01-01
            • 2017-11-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-11-28
            • 2015-08-27
            相关资源
            最近更新 更多