2014-01-17 3 views
11

Я использовал следующий код, чтобы извлечь URL-адрес ресурса из объекта MPMediaItem, возвращенного из MPMediaItemPickerController, чтобы я мог копировать музыкальные файлы из музыкальной библиотеки пользователей 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

это может помочь вам http://stackoverflow.com/questions/5571036/how-to-detect-if-an-mpmediaitem-represents -a-drm-protected-audio-track-on-ios/6401317 # 6401317 –

+1

К сожалению, это именно тот код, который я уже использую, который работает на всех моих устройствах, за исключением iPhone 5s. Следующий код всегда приводит к переменной NULL assetURL на iPhone 5s. NSURL * assetURL = [item valueForProperty: MPMediaItemPropertyAssetURL]; Я предполагаю, что это должно иметь какое-то отношение к 64-битной архитектуре, но я не могу себе представить, почему это будет проблемой ... Спасибо –

+0

У меня тоже такая проблема, но с iPhone 5. MPMediaItemPropertyAssetURL всегда возвращает ноль для трека, который был возвращен из запроса на устройстве - так что он должен быть там (и я могу воспроизвести его с iPod) – Jonny

ответ

22

Я обнаружил, что проблема была песня, которую я пытался получить свойство MPMediaItemPropertyAssetURL для фактически не на моем устройстве. Он был указан в медиа-библиотеке, но на самом деле был все еще в iCloud. Как только я загрузил песню на свое устройство, проблема была решена. Насколько мне не нравится отвечать на мой вопрос, я взял совет Джеруэна, чтобы он мог надеяться помочь другим.

+0

Спасибо. Действительно приятный ответ –

+2

@Greg Ellis Я купил 3 альбома из iTunes напрямую и загрузил на свой iPhone. И для некоторых песен я получаю значение NIL для URL. Так что все еще это странно. – Bonnke

1

Мы можем добавить фильтр, который не показывает элементы ICloud с

[mediaPicker setShowsCloudItems:NO]; 
Смежные вопросы