2

我正在尝试编写一个库,以便它足够通用以使其有用。问题是它需要更新其他类的属性,属性和类都应该是动态的。

现在我可以使用公共变量来做到这一点没问题,我只需传递一个指向我要更新的变量的指针。然而,设置类的属性也非常有用,因为它们在目标 C 中被如此广泛地使用。

现在这又不是问题,只要属性是对象类型,尝试设置原始类型属性。

我当前的代码看起来类似于以下属性:

NSInvocation* invoc = [NSInvocation invocationWithMethodSignature:[[myInstance class] instanceMethodSignatureForSelector:mySelector]];
[invoc setTarget:myInstance];
[invoc setSelector:mySelector];
[invoc setArgument:&myObject atIndex:2];
[invoc invoke];

但是 setArgument 方法只允许指针类型,而属性允许具有任何原始类型。有没有办法动态分配原始类型属性?

4

2 回答 2

5

KVO 应该为您进行转换:

[object setValue:[NSNumber numberWithInt:i] forKey:@"myVar"];

NSNumber如果您的myVar定义为:

int myVar;
...
@propery (nonatomic) int myVar;
于 2009-06-23T13:02:01.243 回答
1

“但是 setArgument 方法只允许指针类型”你错过了一些东西。to 的参数setArgument:不是您传递给该方法的数据。它是您传递的数据(任何类型)的地址。现在,您上面的代码采用对象指针的地址(它是指向指针的指针)。你可以很容易地让它获取一个整数的地址(它不在乎)。换句话说,无论类型如何,您的相同代码已经可以工作:

NSInvocation* invoc = [NSInvocation invocationWithMethodSignature:[myInstance methodSignatureForSelector:mySelector]];
[invoc setTarget:myInstance];
[invoc setSelector:mySelector];
int myInt = 42;
[invoc setArgument:&myInt atIndex:2];
[invoc invoke];
于 2011-08-01T01:40:18.240 回答