0

ジェイルブレイクされたiPhoneのiTunesディレクトリでカスタム着信音の名前を取得しようとしています。カスタム着信音を正常に一覧表示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)

4

1 に答える 1

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

その行は完全に間違っています。あなたのdictionaryオブジェクトは、実際には、「YBRZ.m4r」のような値に等しいキーを持つNSDictionaryです。存在しない「名前」という名前のキーの値をリクエストしています。次に、返されたオブジェクトを使用して、あたかも であるかのようにメソッドを送信していますが、そう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;

また、私はNSMutableDictionarysを使用していないことに注意してください。辞書を変更可能にする必要がない場合は、おそらく変更可能な辞書を使用する必要があります。

于 2009-12-29T02:11:46.273 に答える