2010-12-06 3 views
3

J'utilise le UIImagePickerController dans iOS 4.2.1 sur un iPhone 3Gs. J'ai précédemment utilisé la méthode obsolèteUIImagePickerControllerDelegate ne répond pas correctement

- (void)imagePickerController: didFinishPickingImage: editingInfo: 

sans problème. J'ai une autre application utilisant la nouvelle API didFinishPickingMediaWithInfo dans une autre application, et la méthode n'est jamais appelée par le sélecteur une fois le média choisi.

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

est ce bloc de code appelé? par quoi je veux dire - est-ce que '[UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypePhotoLibrary]' retourne 'YES'? –

Répondre

1

vous avez

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

où vous voulez probablement

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

Il se peut que cette ligne:

if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) { 

retourne faux. Cela se produit si la photothèque de l'utilisateur est vide; ce serait vrai sur le simulateur d'iPhone, par exemple.

EDIT: Comme le montrent les autres exemples, vous avez également mal orthographié la méthode déléguée. Il devrait être:

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

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

Regardez comme vous le répète 'imagePickerController:' une partie de cette méthode.

0

Mettre le sélecteur dans le pool de libération automatique peut être votre problème - il ne restera probablement pas assez longtemps pour appeler son délégué. Conservez-le à la place:

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

Et puis dans le délégué, vous pouvez le libérer:

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

C'est le programme que je l'ai utilisé pour télécharger des vidéos à WebService par iOS 4.2 sur 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]; 
}