我想在NSOperation添加或从NSOperationQueue中删除时得到通知。我正在尝试为“操作”属性(当前在Queue中的NSOperations数组)设置键值观察,但未触发。我的语法有问题吗?

@implementation myOperationQueueSubclass

-(id)init
{
    if (self = [super init])
    {
    // Initialization code here
    [self addObserver:self
                forKeyPath:@"operations"
                   options:0
                   context:nil];

    }
    return self;
}

- (void)observeValueForKeyPath:(NSString *)keyPath
                  ofObject:(id)object
                    change:(NSDictionary *)change
                   context:(void *)context {
    NSLog(@"queue changed...");
    if ([keyPath isEqualToString:@"operations"]) {

        if (self.operationCount == 0) {
            // No ops

        } else {
            // Has ops
        }
    }
}

最佳答案

语法没有错,但是您观察的是数组属性,而不是数组本身(无论如何,当数组发生突变时,它都不会发出KVO通知)。

如果由于某种原因重新分配了通知,您会收到通知,但是NSOperationQueue必须麻烦手动进行通知或使用KVC accessors,以允许其他人查看何时向其operations添加对象或从其删除对象。

关于objective-c - 如何观察NSOperationQueue的“操作”属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11943883/

10-12 13:46