2010-12-06 144 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]; 
} 
程序