为什么valueForKey在dispatch_queue_t实例变量上使用时抛出异常?

时间:2013-09-24 21:08:12

标签: objective-c

这仅用于单元测试目的

我正在尝试访问dispatch_queue_t,它是目标C对象的受保护实例变量,用于单元测试。我正在使用valueForKey来访问作为对象的受保护实例变量,是否可以为dispatch_queue_t进行等效调用?

谢谢

编辑:我已经读过可以访问这些值,我只是找不到如何解释。

Edit2:当我尝试调用valueForKey时,我得到了 2013-09-24 14:17:35.235 MyApp [7729:a0b] * 由于未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[valueForUndefinedKey:]:此类不是键值编码 - 符合密钥_queue。'

Edit3:我刚测试并意识到它应该使用结构,抛出异常的是检索dispatch_queue_t

Edit4:这是使用自动引用计数的代码

2 个答案:

答案 0 :(得分:2)

使用与对象相同的-valueForKey:

调用-valueForKey:将始终返回一个对象,但是在访问非对象类型的情况下,该值将包含在NSValue对象中。如果结构是直接NSValue,如果是数字intfloat,则使用NSNumber子类。

获得NSValue之后,这就是解开结构的方式:

NSValue *value = [object valueForKey:@"key"];
struct Something s;
[value getValue:&s];
// `s` contains the desired struct

答案 1 :(得分:1)

找到解决方案:

访问实例变量的另一种方法是使用object_getIvar:

使用以下代码
Ivar queueIvar = class_getInstanceVariable([_myObject class], "_queue");
_privateQueue = (__bridge dispatch_queue_t)(object_getIvar(_myObject, queueIvar));