UIImagePickerControllerDelegate не отвечает должным образом - PullRequest
3 голосов
/ 06 декабря 2010

Я использую UIImagePickerController в iOS 4.2.1 на iPhone 3Gs. Ранее я использовал устаревший метод

- (void)imagePickerController: didFinishPickingImage: editingInfo:

без проблем. У меня есть другое приложение, использующее новый API didFinishPickingMediaWithInfo в другом приложении, и метод никогда не вызывается средством выбора после выбора носителя.

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

Ответы [ 5 ]

1 голос
/ 06 декабря 2010

у вас есть

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

, где вы, вероятно, хотите

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
0 голосов
/ 06 декабря 2010

Это программа, которую я использовал для загрузки видео на веб-сервис через iOS 4.2 на 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];
}
0 голосов
/ 06 декабря 2010

Поместить сборщик в пул автоматического выпуска может быть вашей проблемой - возможно, он не задерживается достаточно долго, чтобы вызвать своего делегата. Сохраните это вместо:

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

И тогда в делегате вы можете освободить его:

[picker dismissModalViewControllerAnimated:YES];
[picker release];
0 голосов
/ 06 декабря 2010

У вас есть это: - (void)imagePickerController:(UIImagePickerController *)picker imagePickerController:didFinishPickingMediaWithInfo:(NSDictionary *)editingInfo

Похоже, вы повторили часть этого метода imagePickerController:

0 голосов
/ 06 декабря 2010

Возможно, эта строка:

if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {

возвращает ложь. Это происходит, если библиотека фотографий пользователя пуста; это было бы верно для симулятора iPhone, например.

РЕДАКТИРОВАТЬ: Как показывают другие примеры, вы также неправильно набрали метод делегата. Должно быть:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...