我想观察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;
然而,程序仍然崩溃。
我有几个问题:
提前致谢。
答案 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);
}];