2014-01-17 66 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]; 
相關問題