2014-01-17 44 views
11

我一直在使用以下代码从MPMediaItemPickerController返回的MPMediaItem对象中提取资产url,以便我可以将音乐文件从用户iPhone itunes音乐库复制到文档文件夹进行处理,但在iPhone 5s上,我总是从MPMediaItemPropertyAssetURL获得一个空值,但是当我在iPhone 4或iPhone 5上运行相同的代码时,它的工作原理是它应该返回正确的URL。MPMediaItemPropertyAssetURL返回null仅适用于iPhone 5s

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

    [self dismissViewControllerAnimated:YES completion:nil]; 

     if(mediaItemCollection){ 
      MPMediaItem *mediaItem = (MPMediaItem *)[mediaItemCollection.items objectAtIndex: 0]; 
      NSString *songTitle = [mediaItem valueForProperty: MPMediaItemPropertyTitle]; 
      NSLog(@"songtitle: %@", songTitle); 
      NSURL *assetURL = [mediaItem valueForProperty: MPMediaItemPropertyAssetURL]; 
      NSLog(@"%@", assetURL); 
     } 

} 

我试过从有效的体系结构中删除arm64,只为armv7和armv7s构建,但是没有解决这个问题。

有没有人知道为什么会发生这种情况,我如何解决这个问题,或者如果有我可以使用的解决方法?我需要能够将音乐从iPhone的音乐库复制到文档文件夹,以便我可以正确处理dj应用程序的音乐。

感谢

+1

iCloud的项目,它可以帮助你http://stackoverflow.com/questions/5571036/how-to-detect-if-an-mpmediaitem-represents -a-drm-protected-audio-track-on-ios/6401317#6401317 –

+1

不幸的是,这正是我已经在使用的代码,它正在除iPhone 5s之外的所有设备上工作。以下代码总是在iPhone 5s上产生一个NULL assetURL变量。 NSURL * assetURL = [item valueForProperty:MPMediaItemPropertyAssetURL];我想它必须与64位体系结构有关,但我无法想象为什么它会是一个问题...谢谢 –

+0

我也有这个问题,但与iPhone 5. MPMediaItemPropertyAssetURL总是返回零对于从设备上的查询返回的曲目 - 所以它必须在那里(我可以从iPod播放它) – Jonny

回答

22

我发现的问题是,我试图让MPMediaItemPropertyAssetURL财产实际上不是我的设备上的歌曲。它被列在媒体库中,但实际上还在iCloud中。一旦我将歌曲下载到我的设备上,问题就解决了。尽管我不喜欢回答我自己的问题,但我依据Jeroen的建议,希望能够帮助其他人。

+0

谢谢。真的很好回答 –

+2

@Greg Ellis我直接从iTunes购买了3张专辑,并在我的iPhone上下载。对于一些歌曲,我得到了URL的NIL值。所以这仍然很奇怪。 – Bonnke

1

我们可以添加过滤器,这并不表明与

[mediaPicker setShowsCloudItems:NO]; 
相关问题