具有空 URL 的 Objective-C MPMediaItem

Posted

技术标签:

【中文标题】具有空 URL 的 Objective-C MPMediaItem【英文标题】:Objective-C MPMediaItem with null URL 【发布时间】:2017-08-08 23:12:58 【问题描述】:

我有一个项目使用MPMediaPickerController 从媒体播放器中选择音频文件。但是,当尝试存储它的 URL 时,我只得到了 null 返回。我的代码如下:

- (void)showMediaPicker:(NSString *)title 
    MPMediaPickerController *picker = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeAny];
    picker.delegate = self;
    picker.prompt = title;
    picker.allowsPickingMultipleItems = NO;
    picker.showsCloudItems = NO;
    [self.viewController presentViewController:picker animated:YES completion:NULL];


- (void)mediaPicker: (MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection 
    MPMediaItem *item = [mediaItemCollection.items firstObject];
    NSURL *assetURL = [item valueForProperty:MPMediaItemPropertyAssetURL];//returning null
    NSString *type = [self contentTypeForFile:assetURL.lastPathComponent];
    NSString *title = [item valueForProperty:MPMediaItemPropertyTitle];
    [self callbackWithName:title type:type url:assetURL];

无论出于何种原因,我的*assetURL 在从设备库中选择单个音频项时为零。我能找到的关于这个问题的唯一答案通常与从 MediaPicker 选择云项目时的 url 是 null 相关。但是,如上所示,我设置了showCloudItems = NO

我将不胜感激任何帮助;如果您需要任何其他信息,请告诉我!

【问题讨论】:

item的值是多少? NSLog(@"%@", item) 结果: 7217559012103102902 NSURL *assetURL = (NSURL*)[item valueForProperty:MPMediaItemPropertyAssetURL];有什么作用吗? 不幸的是,我得到了同样的结果 【参考方案1】:

事实证明,来自“iCloud 音乐库”的音乐受 DRM 保护,因此,当在 MPMediaPickerController 中选择时,assetURL 为空。简单的解决方法是从“音乐”应用程序的设置中关闭“iCloud 音乐库”设置。我希望picker.showsCloudItems = NO; 可以防止这种情况发生,但显然我错了。

【讨论】:

以上是关于具有空 URL 的 Objective-C MPMediaItem的主要内容,如果未能解决你的问题,请参考以下文章

NSJSONSerialization 返回 null - Objective-c

Objective-C 委托内存存储空问题

较新的 Xcode 版本中缺少“空应用程序”(Objective-C)

Objective-C 空指针和野指针

objective-c 空 NSArray 错误

Objective-C09-空指针和野指针