2014-12-18 3 views
0

В моем приложении я хочу записать голос и отправить по электронной почте. Я записываю голос, и как только я нажимаю кнопку «Прикрепление», это вызывает мне следующую ошибку. Кажется, голос не записан.Запись голоса не работает

enter image description here

Вот мой фрагмент кода

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSArray *pathComponents = [NSArray arrayWithObjects: 
           [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject], 
           @"MyAudioMemo.m4a", 
           nil]; 
    NSURL *outputFileURL = [NSURL fileURLWithPathComponents:pathComponents]; 

    NSLog(@"%@",outputFileURL); 

    AVAudioSession *session = [AVAudioSession sharedInstance]; 
    [session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 

    // Define the recorder setting 
    NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init]; 

    [recordSetting setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey]; 
    [recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey]; 
    [recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey]; 

    // Initiate and prepare the recorder 
    recorder = [[AVAudioRecorder alloc] initWithURL:outputFileURL settings:recordSetting error:NULL]; 
    recorder.delegate = self; 
    recorder.meteringEnabled = YES; 
    [recorder prepareToRecord]; 
} 

- (IBAction)microButton:(id)sender { 

    if(counter%2==0) 
    { 
     if (!recorder.recording) { 
      AVAudioSession *session = [AVAudioSession sharedInstance]; 
      [session setActive:YES error:nil]; 
      // Start recording 
      [recorder record]; 
     } 
     counter=counter+1; 
    } 
    else{ 
     [recorder stop]; 

     AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
     [audioSession setActive:NO error:nil]; 
      counter=counter+1; 
    } 
} 

- (void) audioRecorderDidFinishRecording:(AVAudioRecorder *)avrecorder successfully:(BOOL)flag{ 
    NSLog(@"audioPlayerDidFinishPlaying"); 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"Done" message: @"Voice recorded successfully!"delegate: nil cancelButtonTitle:@"OK"otherButtonTitles:nil]; 
    [alert show]; 
} 


- (IBAction)attachBtn:(id)sender {  

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *URL = [documentsDirectory stringByAppendingPathComponent:@"MyAudioMemo.m4a"]; 

NSString* someText = @"Voice"; 
NSURL *urlToShare = [NSURL fileURLWithPath:URL isDirectory:NO]; 
NSArray* dataToShare = @[someText, urlToShare]; 

UIActivityViewController* activityViewController = 
[[UIActivityViewController alloc] initWithActivityItems:dataToShare 
            applicationActivities:nil]; 
activityViewController.excludedActivityTypes = @[UIActivityTypePrint,UIActivityTypeCopyToPasteboard,UIActivityTypeAssignToContact]; 
activityViewController.popoverPresentationController.barButtonItem = (UIBarButtonItem *)sender; 

activityViewController.completionHandler = ^(NSString *activityType, BOOL completed) { 
    //if (completed) { 
    [self dismissViewControllerAnimated:YES completion:nil]; 
    //} 
}; 

[self presentViewController:activityViewController animated:YES completion:nil]; 
} 

ответ

1

Предполагая, что это на IPad, когда вы представляете UIActivityViewController, он будет показан в пирог. Вам нужно сделать то, что сообщает сообщение, установить либо sourceView, либо barButtonItem.

activityViewController.popoverPresentationController.barButtonItem = sender; 

Это предполагает, что sender является UIBarButtonItem. Если это UIButton или другой вид, используйте:

activityViewController.popoverPresentationController.sourceView = sender; 
+0

не могли бы вы подробно рассказать подробнее? – casillas

+0

Что еще вам нужно? Добавьте строку кода, которую я показал сразу после создания вашего 'UIActivityViewController'. – rmaddy

+0

Я создал popover, и как только я нажимаю кнопку attach, появляется мой popover, каким будет следующий шаг? – casillas

Смежные вопросы