استعادة منطقة داخل nsdictionary من ملف plist
-
26-09-2019 - |
سؤال
لدي ملف plist الذي يحتوي على مجموعة من القواميس. هنا هو واحد:
قاموس فريد
اسم فريد
Ismale [تم فحص المربع
الآن أقوم بتهيئة كائن شخصي مع القاموس الذي قرأته من ملف PLIST:
-(id) initWithDictionary: (NSDictionary *) dictionary {
if (self = [super init])
self.name = [dictionary valueForKey: @"Name"];
self.isMale = ????
}
كيف يمكنني الانتهاء من الكود أعلاه بحيث يتم ضبط self.ismale على نعم إذا تم التحقق من المربع في ملف PLIST ، ولا إذا لم يكن كذلك. ويفضل أن يتم تعيينه أيضًا إلى لا إذا لم يكن هناك مفتاح Ismale في القاموس.
المحلول
عادةً ما يتم تخزين قيم Bool في حاويات OBJ-C ملفوفة في كائن nsnumber. إذا كان الأمر كذلك في حالتك ، فيمكنك استرداد قيمة Bool باستخدام:
self.isMale = [[dictionary objectForKey:@"isMale"] boolValue];
نصائح أخرى
فلاديمير على حق ، سأقوم فقط بالتناغم وأقول إنه من الجيد أن تتحقق من وجود تلك القيم من plist أيضًا ، وإذا لم يتم تعيينها على قيمة افتراضية عادة.
شيء مثل:
id isMale = [dictionary valueForKey:@"isMale"];
self.isMale = isMale ? [isMale boolValue] : NO;
الذي يتحقق لمعرفة ما إذا كانت قيمة المفتاح "Ismale" موجودة في القاموس. إذا حدث ذلك ، فإنه يحصل على القيمة المنطقية منه. إذا لم يفعل ذلك ، فإنه يعين ذاتيًا إلى الافتراضي من لا.