我创建了一个MyService
课程,我将其设为 singleton ,如下所示:
标题:
@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
如上所述,我在dispatch_queue_t queue
类中定义了私有变量MyService
。
在另一个类中,我尝试通过以下方式访问此私有变量:
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私有变量,它在那里工作正常)
答案 0 :(得分:2)
正如我昨天(今天?)解释的那样,键值编码从键形成了访问器选择器。您没有要在选择器上执行的访问器方法。 (对于协议:它可以直接访问ivars,请参阅+accessInstanceVariablesDirectly
,但您不想这样做。)
将其作为财产。这将自动添加访问者。或者手动实现访问者。
答案 1 :(得分:0)
问题是因为它的ivar变量和KVC使用属性。所以你需要创建属性而不是ivar变量。