سؤال

أحاول الحصول على اسم نغمات الرنين المخصصة في دليل iTunes على جهاز 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