Я пытаюсь сохранить плейлист с песнями, созданными с помощью медиа-подборщика. Я попытался использовать предложение, приведенное в 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-апгрейдов). Если да, то как?
ОК спасибо. Я предполагаю, что ссылка на http://stackoverflow.com/questions/5702707/play-ipod-playlist-retrieved-from-a-saved-persistentid-list предоставляет необходимые реализации. Единственное, что меня беспокоит, это комментарий от Apple о persistentID. В нем говорится: «Значение не гарантируется для сохранения в цикле синхронизации/синхронизации/синхронизации». Вы хоть понимаете, что это значит? – JeffB6688
уверен, это правда. это означает, что если пользователь не синхронизирует дорожку с устройством, а затем повторно синхронизирует одну и ту же дорожку, идентификатор изменится для одной и той же музыки, и это нормально. если вы хотите сохранить сохраняемый массив музыки во время синхронизации, вы можете сохранить массив словаря: @ {"trackName": @ "", @ "artistName": @ ""} вместо persistentID в userdefaults и запрос для песни eveytime вы запускаете приложение. но я бы не рекомендовал этого, потому что это может быть дорого, когда количество песен велико. – Shahin