UITableView da chiavi del dizionario plist, iOS
Domanda
Sto tentando di ottenere il nome delle suonerie personalizzate nella directory di iTunes su un iPhone jailbroken. Posso elencare con successo le suonerie personalizzate, ma si ri visualizzato come HWYH1.m4r
, che è ciò che iTunes rinomina i file, ma so che theres un modo per decifrare il nome effettivo del brano.
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
sta tornando:
"YBRZ.m4r" =
{
GUID = 17A52A505A42D076;
Name = "Wild West";
"Total Time" = 5037;
};
cell.textLabel.text
sta tornando: name: (null)
Soluzione
NSMutableArray *customRingtone = [[dictionary objectForKey:@"Name"] objectAtIndex:indexPath.row];
Quella linea è totalmente sbagliato. Il tuo dictionary
oggetto, infatti, un NSDictionary con chiavi uguali a valori come 'YBRZ.m4r'. Si richiede un valore per una chiave denominata 'Nome', che non esiste. Poi, con quella oggetto restituito, si sta inviando un metodo, come se fosse un NSArray
, che non lo è. E quindi ci si aspetta che per restituire un NSArray
. Anche in questo caso, non credo che lo fa. Dovrebbe essere più simile a questo:
NSArray *keys = [dictionary allKeys];
id key = [keys objectAtIndex:indexPath.row];
NSDictionary *customRingtone = [dictionary objectForKey:key];
NSString *name = [customRingtone objectForKey:@"Name"];
cell.textLabel.text = name;
Si noti inoltre, non sto usando NSMutableDictionary
s. Se non è necessario il dizionario di essere mutevole, probabilmente dovrebbe avere un dizionario mutevole.