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)

È stato utile?

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 NSMutableDictionarys. Se non è necessario il dizionario di essere mutevole, probabilmente dovrebbe avere un dizionario mutevole.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top