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

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

现在,只要属性是对象类型,尝试设置基本类型属性,这就不是问题了。

我当前的代码在这些行中看起来像属性:

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

然而,setArgument方法仅允许指针类型,但允许属性具有任何基本类型。有没有办法动态分配基本类型属性?

有帮助吗?

解决方案

KVO应该为您进行转换:

[object setValue:[NSNumber numberWithInt:i] forKey:@"myVar"];
如果 myVar 定义为:

NSNumber 转换为int。

int myVar;
...
@propery (nonatomic) int myVar;

其他提示

"然而,setArgument方法仅允许指针类型“你错过了什么。 setArgument:的参数不是您传递给方法的数据。它是您传递的数据(无论类型)的地址。现在,上面的代码获取对象指针的地址(它是指向指针的指针)。您可以轻松地获取整数的地址(它不关心)。换句话说,无论类型如何,您的相同确切代码都已有效:

NSInvocation* invoc = [NSInvocation invocationWithMethodSignature:[myInstance methodSignatureForSelector:mySelector]];
[invoc setTarget:myInstance];
[invoc setSelector:mySelector];
int myInt = 42;
[invoc setArgument:&myInt atIndex:2];
[invoc invoke];
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top