2011-07-20 14 views
5

Bazı xml'yi ayrıştırarak sunucuyu yeni özelliklerle sık sık güncelleştiriyorum. Bu yüzden, yeni bir etiket veya bir şey eklediğimde, currentElementValue henüz sınıfımın bir parçası olmadığından arama yaptığımda veriyi parçalayan uygulamaum. Bir sınıfın bir özelliği olup olmadığını kontrol etmek için var mı yoksa sadece yükselen istisnayı mı yakalamalıyım?Bir sınıfın bir özelliği olup olmadığını nasıl görebilirsiniz?

[a setValue:currentElementValue forKey:elementName]; 

Teşekkür

cevap

8

Eğer kullanabilirsiniz referans olmasını ve alıcı isimleri geçersiz olmadıysanız:

if ([object respondsToSelector:@selector(setProp:)]) { 

adında bir mülkün kurucu metod açısından "pervane" ya:

Onun alıcı yöntemi için

.

Aksi takdirde, böyle bir söz dizimi kullanılırsa: Çok basit

if ([object respondsToSelector:@selector(hasProp)]) { 
+2

Her zaman geçerli değil, özellik olarak, alıcı ve ayarlayıcı için farklı yöntemler tanımlanabilir. –

+2

'@property (atama, getter = isOpen) BOOL açık;' - ortak bir desen – bshirley

+0

@ Jonathan Grynspan: Yorumunuz için teşekkürler. Cevabımı daha hassas ve içgörünüzü içerecek şekilde düzenledim! – sergio

18

:

if (class_getProperty([object class], "propertyName")) { 
    // it has that property! 
} 
+0

Awesome o kadar kolay – Chris

+1

iOS için dosyanıza '#import ' eklemeniz gerekiyor – RunLoop

0
özelliğini tanımlarken, yukarıda söz dizimi ile ilgili adı kullanmak

@property (assign, getter=hasProp) BOOL prop; 

Önce mülk adınızın ilk harfini büyük harfle yazmanız gerekiyor. Daha sonra, özelliği ayarlayabileceğiniz bir seçici oluşturmanız gerekir. (Eğer bu özellik için ayarlayıcı "setFoo:" adı verilecek varsayılan olarak daha sonra "foo" adlı bir özellik varsa.)

SEL propertySetter = NSSelectorFromString([NSString stringWithFormat:@"set%@:",capitalizedProperty]); 

Sonra sergio yanıtında olduğu gibi, çağrı:

if ([object respondsToSelector:propertySetter]) 
{ 
    [object setValue:value forKey:propertyName]; 
} 

Kontrol Nesnenin özelliklerini nasıl alacağınızı görmek için this post.

İlgili konular