uitableview من مفاتيح القاموس plist ، iOS
سؤال
أحاول الحصول على اسم نغمات الرنين المخصصة في دليل 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
س. إذا لم تكن بحاجة إلى أن يكون القاموس قابلاً للتغيير ، فمن المحتمل أن يكون لديك قاموس قابل للتغيير.