观察NSMutableArray对象的Count属性

时间:2011-08-08 17:28:40

标签: objective-c

我想观察NSMutableArray对象的count属性。通过利用索引数组访问器实现多对多关系,无论何时添加或删除对象,我都可以直接观察数组的变化。但是,我想简单地观察count属性,这样当我使用observeValueForKeyPath方法时,传递给参数的对象就是数组对象本身,而不是持有数组的类。

我的情况如下:

我在我的AppDelegate类中声明了一个NSMutableArray *卡作为属性(和ivar)。

从我的viewcontroller,我尝试观察这个数组的count属性:

[appDelegate.cards addObserver:self forKeyPath:@"count" options:0 context:NULL];

但是,这会导致我的程序崩溃,并出现以下错误:

[<__NSArrayM 0x4e17fd0 addObserver:forKeyPath:options:context] is not supported. Key path: count'

我尝试为多对多关系实现访问器

- (void)addCardsObject:(Card *)anObject;
- (void)removeCardsObject:(Card *)anObject;

然而,程序仍然崩溃。

我有几个问题:

  1. 我如何能够观察此NSMutableArray的count属性?
  2. NSMutableArray的计数属性是定义为一对一的关系,还是整个对象在确定它是一个多对多关系还是一对一关系时很重要(NSMutableArray是一个集合对象,因此它是一个 - 很多关系,即使我只是想要观察count属性,而不是集合中对象的属性)。
  3. 提前致谢。

2 个答案:

答案 0 :(得分:4)

NSArray本身不支持KVO,期间。它是您需要观察的阵列前面的控制器。例如,如果您有NSArrayController,则可以为arrangedObjects.count设置观察者。

答案 1 :(得分:1)

这就是悲哀地知道NSarry,NSMutableArray的不支持志愿。当我想用反应性可可观察选择时,我就遇到了这个问题。

但幸运的是,UIViewController符合KVO标准。

//create a readonly property selectionCount
@property (nonatomic, readonly)NSInteger selectionCount;
...

//Implement the getter method
-(NSInteger)selectionCount{
    return self.arrSelection.count;
}
...

RAC(self.btnConfirm, enabled) = [RACSignal combineLatest:@[RACAbleWithStart(self.selectionCount)] reduce:^(NSNumber *count){
        return @([count integerValue] > 0);
    }];