0

Я пытаюсь сохранить плейлист с песнями, созданными с помощью медиа-подборщика. Я попытался использовать предложение, приведенное в Persist a MPMediaItemCollection Object Using NSUserDefaults. Это решение использует NSKeyedArchiver следующим образом:NSKeyedArchiver не видит правильного сохранения объекта MPMediaItemCollection

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:mediaItemCollection]; 

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setObject:data forKey:@"someKey"]; 
[defaults synchronize]; 

Тогда, когда MPMediaItemCollection должен быть получен, то выполняется следующее:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSData *data = [defaults objectForKey:@"someKey"]; 
MPMediaItemCollection *mediaItemCollection = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

Хотя это, казалось, работали на первых, я обнаружил, что это не работайте последовательно со временем. Похоже, что после того, как мое приложение загрузилось после новой версии программного обеспечения, некоторые элементы мультимедиа в плейлисте повреждены. Например, когда я пытаюсь загрузить название песни из извлеченной MPMediaItemCollection для отображения в Tableview следующим образом:

MPMediaItem *anItem = (MPMediaItem *)[mediaItemCollection.items objectAtIndex: row]; 

if (anItem) { 
    cell.textLabel.text = [anItem valueForProperty:MPMediaItemPropertyTitle]; 

    if (cell.textLabel.text == nil) { 
     NSString * persistentID = [anItem valueForProperty:MPMediaItemPropertyPersistentID]; 
     ... 
} 

названия песни ноль для некоторых записей. Если я попытаюсь захватить persistentID для песни в этом индексе в очереди, есть persistentID, но он не указывает на действительную песню (так что, вероятно, это просто мусор).

ТАКЖЕ ВОПРОС: Возможно ли сохранить MPMediaItemCollection, который, я уверен, действителен во всех запусках и обновлениях программного обеспечения (как для моих обновлений, так и для iOS-апгрейдов). Если да, то как?

ответ

0

Ответ не такой! объект MPMediaItemCollection не может быть преобразован в NSArray, NSDictionary или любой другой объект, который мы можем архивировать в NSUserDefaults.

Мое предложение состоит в том, чтобы перечислить коллекцию, сохранить массив [anItem valueForProperty:MPMediaItemPropertyPersistentID] s. сохраните его в NSUserDefaults

, затем в следующем запуске приложения вы читаете и перечисляете NSArray и создаете MPMediaItemCollection обратно с элементами с постоянными идентификаторами.

Надеюсь, это поможет

+0

ОК спасибо. Я предполагаю, что ссылка на http://stackoverflow.com/questions/5702707/play-ipod-playlist-retrieved-from-a-saved-persistentid-list предоставляет необходимые реализации. Единственное, что меня беспокоит, это комментарий от Apple о persistentID. В нем говорится: «Значение не гарантируется для сохранения в цикле синхронизации/синхронизации/синхронизации». Вы хоть понимаете, что это значит? – JeffB6688

+0

уверен, это правда. это означает, что если пользователь не синхронизирует дорожку с устройством, а затем повторно синхронизирует одну и ту же дорожку, идентификатор изменится для одной и той же музыки, и это нормально. если вы хотите сохранить сохраняемый массив музыки во время синхронизации, вы можете сохранить массив словаря: @ {"trackName": @ "", @ "artistName": @ ""} вместо persistentID в userdefaults и запрос для песни eveytime вы запускаете приложение. но я бы не рекомендовал этого, потому что это может быть дорого, когда количество песен велико. – Shahin