Вопрос

Я пытаюсь получить название пользовательских рингтонов в каталоге iTunes на Jailbrasbroke Iphone. Я могу успешно перечислить пользовательские рингтоны, но они отображаются как HWYH1.m4r, что и то, что iTunes переименовает файлы, но я знаю, что есть способ расшифровать фактическое название песни.

    NSMutableDictionary *custDict = [[NSMutableDictionary alloc] initWithContentsOfFile:@"/iPhoneOS/private/var/mobile/Media/iTunes_Control/iTunes/Ringtones.plist"];
    NSMutableDictionary *dictionary = [custDict objectForKey:@"Ringtones"];
    NSMutableArray *customRingtone = [[dictionary objectForKey:@"Name"] objectAtIndex:indexPath.row];
    NSLog(@"name: %@",[customRingtone objectAtIndex:indexPath.row]);
    cell.textLabel.text = [customRingtone objectAtIndex:indexPath.row];

dictionary возвращается:

"YBRZ.m4r" =     
{
    GUID = 17A52A505A42D076;
    Name = "Wild West";
    "Total Time" = 5037;
};

cell.textLabel.text возвращается: name: (null)

Это было полезно?

Решение

NSMutableArray *customRingtone = [[dictionary objectForKey:@"Name"] objectAtIndex:indexPath.row];

Эта линия совершенно неверна. Ваш dictionary Объедините, на самом деле, NSDictionary с клавишами, равными, такими значениями, как «ybrz.m4r». Вы запрашиваете значение для ключа с именем «Имя», которого не существует. Затем, с этим возвращенным объектом, вы отправляете ему метод, как если бы он был NSArray, чего это не так. А потом вы ожидаете, что это вернет NSArray. Анкет Опять же, я не думаю, что это так. Это должно быть больше похоже на это:

NSArray *keys = [dictionary allKeys];
id key = [keys objectAtIndex:indexPath.row];
NSDictionary *customRingtone = [dictionary objectForKey:key];
NSString *name = [customRingtone objectForKey:@"Name"];
cell.textLabel.text = name;

Также обратите внимание, я не использую NSMutableDictionaryс Если вам не нужно, чтобы словарь был изменчивым, у вас, вероятно, должен быть изменчивый словарь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top