2010-12-06 101 views
3

我在iPhone 3Gs上的iOS 4.2.1中使用UIImagePickerController。我以前使用过时的方法UIImagePickerControllerDelegate没有正确响应

- (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** 
    } 
+0

是代码块被调用?我的意思是 - '[UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]`return`YES`? – 2010-12-06 04:09:24

回答

1

你有

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

,你可能想

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

这可能是因为这条线:

if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) { 

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

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

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

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

看起来像你重复 'imagePickerController:' 这种方法的一部分。

0

把选取器放在autorelease池中可能是你的问题 - 它可能不会持续很长时间来调用它的委托。保留它,而不是:

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

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

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

这是我用来上传的视频通过iOS 4.2的对web服务在3G

-(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]; 
} 
程序