وصول خاصية Accessive-C ديناميكيًا باستخدام اسم الخاصية
-
21-09-2019 - |
سؤال
أنا أعرف اسم سلسلة خاصية لكائن. كيف يمكنني الحصول على هذه الخاصية وإعداد هذه الخاصية باستخدام السلسلة؟
المحلول
في حين أن weichsel صحيح ، هناك طريقة أفضل.
يستخدم:
[anObject valueForKey: @"propertyName"];
و
[anObject setValue:value forKey:@"propertyName"];
بشكل ملحوظ، @"propertyName"
يمكن أن يكون NSString
وهذا يتكون ديناميكيا في وقت التشغيل.
هذه التقنية تسمى ترميز القيمة الرئيسية وهو أمر أساسي للكاكاو.
لماذا هذا أفضل بسبب -valueForKey
سأفعل ما هو ضروري "مربع" أي نوع يعيد الخاصية إلى كائن. وبالتالي ، إذا كانت العقار من النوع int
, ، سوف يعود NSNumber
مثيل يحتوي على int.
هذا أسهل بكثير للتعامل مع - performSelector
إرادة فقط العمل من أجل الأنواع التي يحدث لتناسب ذاكرة المؤشر.
لاحظ أن هناك أيضًا -setValue:forKey:
.
نصائح أخرى
@synthesize propertyName
أتمتة توليد أساليب getter و setter.
المترجم يولد
- (id)propertyName;
- (void)setPropertyName;
إذا كان لديك محدد مثل NSString ، فيمكنك استخدامه performSelector:NSSelectorFromString
.
على سبيل المثال:
[object performSelector:NSSelectorFromString(@"propertyName") ...]