我有一个关于对象变量的问题,我想知道我是否可以检查字符串是否是对象的实例变量? 下面,举例说明我的问题:
我有一个对象 - MyObject.h:
@interface MyObject : NSObject
{
//Variables
id myVariable1;
id myVariable2;
}
@property (nonatomic, retain) id myVariable1;
@property (nonatomic, retain) id myVariable2;
我还有一个数组列表:
NSArray * myArray = [[NSArray alloc] initWithObjects:@"myVariable1",@"myVariable2",@"myVariable3",@"myVariable4",nil];
我想知道是否可以确定数组列表中的哪些字符串未在对象MyObject中定义为变量。
=>对于这种情况,myVariable3和myVariable4。
我尝试使用“isKindOfClass”,“isMemberOfClass”,“valueForKeyPath”,“valueForKey”但没有成功...如果您有解决我问题的建议,请告诉我:))
答案 0 :(得分:2)
假设属性未使用自定义setter名称,您可以执行以下操作:
MyObject *object = ...;
for (NSString *name in myArray) {
SEL getterName = NSSelectorFromString(name);
if ([object respondsToSelector:getterName]) {
NSLog(@"MyObject has a method named %@", getterName);
} else {
NSLog(@"MyObject does not have a method named %@", getterName);
}
}
答案 1 :(得分:1)
我会使用NSClassFromString类创建一个用于比较的对象。
if ([myClass isKindOfClass:NSClassFromString(myClassString)] {
// class matches string
} else {
// class doesn't match
}
答案 2 :(得分:0)
检查数组中的值是否是某个对象的属性更容易。与您的情况一样,valueForKey:
仅在myInstance1
和myInstance2
为非零对象时才有效。您只需要实现- (id)valueForUndefinedKey:
方法即可返回nil
,一切都会好起来的。
您还可以尝试使用object_getInstanceVariable
方法迭代数组并分别获取每个可能的实例变量。我相信未声明的实例应该返回NULL
指针(而不是声明但未定义的nil
实例)。