我创建了一个 MyService
类,我把它变成了一个单例,如下所示:
标题:
@interface MyService : NSObject
+(MyService *)sharedInstance;
@end
实现:
@implementation MyService {
dispatch_queue_t queue;
}
+ (VADispatchQueue *)sharedInstance {
static MyService *sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[MyService alloc] init];
queue = dispatch_queue_create("my.custom.queue", NULL);
});
return sharedInstance;
}
...
@end
正如您在上面看到的,我在 MyService
类中定义了一个 private 变量 dispatch_queue_t queue
。
在另一个类中,我尝试通过以下方式访问这个私有(private)变量:
dispatch_queue_t queue = [[MyService sharedInstance] valueForKey:@"queue"];
但上面的代码会导致运行时错误:
caught "NSUnknownKeyException", "[<MyService 0x7a068440> valueForUndefinedKey:]: this class is not key value coding-compliant for the key queue."
为什么会出现这个错误? (我在另一个地方使用相同的方式访问另一个类的 BOOL 私有(private)变量并且在那里工作正常)
最佳答案
正如我昨天(今天?)向您解释的那样,键值编码从键中形成访问器选择器。您没有要在选择器上执行的访问器方法。 (对于协议(protocol):它可以直接访问ivars,参见+accessInstanceVariablesDirectly
,但你不想这样做。)
让它成为一个属性。这将自动添加访问器。或者手动实现访问器。
关于ios - 使用 "valueForKey:"访问私有(private)变量但出现运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38020056/