6

Objective-C では、プロパティ値がnil使用されている場合は、[obj.property class]が返されますnil。Objective-C クラスの nil プロパティのクラス名を取得する方法はありますか?

非常に簡単な例を次に示します。

#import <Foundation/Foundation.h>

@interface MyClass : NSObject

@property (nonatomic, assign) NSDictionary *dict;

@end

@implementation MyClass

@end

int main(int argc, char *argv[]) {
    @autoreleasepool {
        MyClass *c = [[MyClass alloc] init];
        NSLog(@"class %@, %@", [c.dict class], [c.dict isKindOfClass:[NSDictionary class]] ? @"YES" : @"NO");
    }
}

出力はclass (null), NO

4

1 に答える 1

8

ゲッターの戻り値の型を確認してみてはいかがでしょうか?

Method m = class_getInstanceMethod([MyClass class], @selector(somePropertyGetter));
char type[32];
method_getReturnType(m, type, sizeof(type));
printf("Property type: %s\n", type);

編集:実際のクラス名を取得するには、プロパティ自体をイントロスペクトします (このカテゴリから取得したコード):

objc_property_t p = class_getProperty([MyClass class], "property");
// If you have a selector:
objc_property_t p = class_getProperty([MyClass class], sel_getName(someSelector));
const char *typeStr = property_getTypeString(p);
于 2013-03-05T19:17:55.277 に答える