UIImagePickerControllerDelegate没有正确响应

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

- (void)imagePickerController: didFinishPickingImage: editingInfo: 

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

 //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** } 

你有

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

你可能想要的地方

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

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

看起来你重复了这个方法的'imagePickerController:'部分。

把select器放在autorelease池中可能是你的问题 – 它可能不会持续很长时间来调用它的代表。 保留它,而不是:

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

然后在代表你可以释放它:

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

这可能是这一行:

 if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) { 

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

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

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

这是我用来通过3G上的iOS 4.2上传video到webservice的程序

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