具有空 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) 结果:NSURL *assetURL = (NSURL*)[item valueForProperty:MPMediaItemPropertyAssetURL];
有什么作用吗?
不幸的是,我得到了同样的结果
【参考方案1】:
事实证明,来自“iCloud 音乐库”的音乐受 DRM 保护,因此,当在 MPMediaPickerController 中选择时,assetURL 为空。简单的解决方法是从“音乐”应用程序的设置中关闭“iCloud 音乐库”设置。我希望picker.showsCloudItems = NO;
可以防止这种情况发生,但显然我错了。
【讨论】:
以上是关于具有空 URL 的 Objective-C MPMediaItem的主要内容,如果未能解决你的问题,请参考以下文章
NSJSONSerialization 返回 null - Objective-c