使用MPMediaPickerController将音乐文件转换为NSData

时间:2015-08-14 10:19:47

标签: ios objective-c nsdata mpmediaitem mpmediapickercontroller

我正在使用MPMediaPickerController上传音乐文件。当我尝试将MPMediaItem转换为NSData时,NSData始终返回NULL。 这是我的代码:

- (IBAction)addMusic:(id)sender {
      MPMediaPickerController *soundPicker=[[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeMusic];
      soundPicker.delegate=self;
      soundPicker.allowsPickingMultipleItems=NO;
      [self presentViewController:soundPicker animated:YES completion:nil];
}
- (void)mediaPicker: (MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection{
      MPMediaItem *item = [[mediaItemCollection items] objectAtIndex:0];
      NSURL *url = [item valueForProperty: MPMediaItemPropertyAssetURL];
      NSString *audioFilePath = [NSString stringWithFormat:@"%@",url];   
      NSData *audioData = [NSData dataWithContentsOfFile:audioFilePath];
      [self dismissViewControllerAnimated:YES completion:nil];
}

请建议我如何将MPMediaItem转换为NSData

1 个答案:

答案 0 :(得分:0)

你的问题在于以下三行:

NSURL *url = [item valueForProperty: MPMediaItemPropertyAssetURL];
NSString *audioFilePath = [NSString stringWithFormat:@"%@",url];   
NSData *audioData = [NSData dataWithContentsOfFile:audioFilePath];

尝试做:

NSURL *url = [item valueForProperty: MPMediaItemPropertyAssetURL];
NSError *error = nil;
NSData *audioData = [NSData dataWithContentsOfURL:url options:nil error:&error];
if(!audioData)
    NSLog(@"error while reading from %@ - %@", [url absoluteString], [error localizedDescription]);

看看它是否更好。

如果您感兴趣,那么第一个代码块出现了问题,[NSString stringWithFormat:@"%@",url]可能会给出一个nil结果,因为url是一个NSURL对象,NSString的格式需要一个NSString对象。