我如何将 UIDocumentInteractionController 与 MPMediaPickerController 一起使用

Posted

技术标签:

【中文标题】我如何将 UIDocumentInteractionController 与 MPMediaPickerController 一起使用【英文标题】:How can i use UIDocumentInteractionController with MPMediaPickerController 【发布时间】:2013-10-28 01:17:29 【问题描述】:

我实现了 MPMediaPickerController

- (IBAction)pickSong:(id)sender 
    MPMediaPickerController *picker =
    [[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeMusic];

    picker.delegate                     = self;
    picker.allowsPickingMultipleItems   = NO;
    picker.prompt                       = NSLocalizedString (@"Select any song from the list", @"Prompt to user to choose some songs to play");
    picker.showsCloudItems = YES;

    [self presentModalViewController: picker animated: YES];

- (void) mediaPicker: (MPMediaPickerController *) mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection

    [self dismissModalViewControllerAnimated: YES];
    if (mediaItemCollection.count > 0) 
        MPMediaItem *mediaItem = [mediaItemCollection.items objectAtIndex:0];
        NSLog(@"%@ - %@, %@", [mediaItem valueForProperty:MPMediaItemPropertyTitle], [mediaItem valueForProperty:MPMediaItemPropertyArtist], [mediaItem valueForProperty:MPMediaItemPropertyAssetURL]);


        self.fileURL = [mediaItem valueForProperty:MPMediaItemPropertyAssetURL];
    


- (void) mediaPickerDidCancel: (MPMediaPickerController *) mediaPicker

    [self dismissModalViewControllerAnimated: YES];

我还单独实现了 UIDocumentInteractionController,以便能够在任何能够处理它的应用程序中打开一首歌曲

- (IBAction)shareButtonPressed:(id)sender 
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"Song.mp3" withExtension:nil];
    self.docController= [UIDocumentInteractionController interactionControllerWithURL:url];
    [self.docController presentOpenInMenuFromRect:CGRectZero inView:self.view animated:YES];

现在我要做的是合并它们两者,我想分享从用户那里挑选的歌曲,这就是我保存歌曲的 URL self.fileURL = [mediaItem valueForProperty:MPMediaItemPropertyAssetURL]; 并且我做了一个简单的更改分享方式

- (IBAction)shareButtonPressed:(id)sender 
    NSURL *url = self.fileURL;
    self.docController= [UIDocumentInteractionController interactionControllerWithURL:url];
    [self.docController presentOpenInMenuFromRect:CGRectZero inView:self.view animated:YES];

我认为这会起作用,但我得到的是一个错误提示

* -[UIDocumentInteractionController setURL:], /SourceCache/UIKit/UIKit-2903.23/UIDocumentInteractionController.m:1010 中的断言失败 2013-10-28 03:14:10.294 ShareTest[1567:60b] * 终止应用程序由于 未捕获的异常“NSInternalInconsistencyException”,原因: 'UIDocumentInteractionController:无效的方案 ipod 库。仅有的 支持文件方案。'

问题显然出在 URL 上,我没有很好地实现它,或者我认为解决方案是获取 MPMediaItem 的 NSData 并将其保存为我的应用程序中的 .mp3 文件,但我没有也不知道如何实现这一点

提前谢谢你

【问题讨论】:

【参考方案1】:

问题在于您作为参数传递的 URL 类型。

你需要使用这个方法:[NSURL fileURLWithPath:path]来创建UIDocumentInteractionController的路径。

您创建的 URL 方案是 ipod-library,但必须是 file

【讨论】:

以上是关于我如何将 UIDocumentInteractionController 与 MPMediaPickerController 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

如何将图像写入文件?

如何将脚本实现到 LibGDX 中?

我如何将合并的图像用于Swift动画?

我如何将 FMDatabase 存储到 iCloud

如何将字体大小更改为 em

Angular:如何手动将打字文件添加到打字稿