我解析了一些xml,並且我使用新功能非常頻繁地更新服務器。所以,當我添加一個新標籤或其他東西時,我的應用程序會在我調用時解析數據,因爲currentElementValue不屬於我的類。無論如何要檢查一個類是否擁有一個屬性,或者我應該只是捕獲異常提升?如何查看某個類是否有屬性?
[a setValue:currentElementValue forKey:elementName];
感謝
我解析了一些xml,並且我使用新功能非常頻繁地更新服務器。所以,當我添加一個新標籤或其他東西時,我的應用程序會在我調用時解析數據,因爲currentElementValue不屬於我的類。無論如何要檢查一個類是否擁有一個屬性,或者我應該只是捕獲異常提升?如何查看某個類是否有屬性?
[a setValue:currentElementValue forKey:elementName];
感謝
如果您還沒有覆蓋,你可以使用標準的setter和getter名稱:
if ([object respondsToSelector:@selector(setProp:)]) {
一個名爲屬性的setter方法 「託」,或者:
if ([object respondsToSelector:@selector(prop)]) {
其獲取方法。
否則,如果你使用的語法,如:
@property (assign, getter=hasProp) BOOL prop;
定義的屬性時,使用相應的名稱與上述語法:
if ([object respondsToSelector:@selector(hasProp)]) {
首先你需要大寫你的屬性名稱的第一個字母。
NSString *capitalizedProperty = [NSString stringWithFormat:@"%@%@", [[propertyName substringToIndex:1] uppercaseString], [propertyName substringFromIndex:1]];
然後,你需要做的是將設置屬性選擇。 (如果你有一個名爲「富」,那麼屬性默認情況下,這個屬性的setter將被稱爲「setFoo:」。)
SEL propertySetter = NSSelectorFromString([NSString stringWithFormat:@"set%@:",capitalizedProperty]);
然後像塞爾吉奧的回答,請致電:
if ([object respondsToSelector:propertySetter])
{
[object setValue:value forKey:propertyName];
}
檢查this post以查看如何獲取對象的屬性。
不總是有效的,因爲屬性可以爲其獲取器和設置器定義不同的方法。 –
@ @property(assign,getter = isOpen)BOOL open;' - 常見模式 – bshirley
@Jonathan Grynspan:謝謝您的評論。我編輯了我的答案,使其更加精確,幷包含了您的洞察力! – sergio