我有一个带有按钮的视图控制器,如果是myArray.count > 0,我想启用它。我让KVO开始工作,但没有更新。
我的按钮属性在这里声明:
@property (strong, nonatomic) IBOutlet UIBarButtonItem *saveButton;我想根据数组中项的计数启用/禁用该按钮:
@property (nonatomic, strong) NSMutableArray *myArray;项通过didSelectRowAtIndexPath添加/移除到数组中。
我发现了几篇关于观察NSMutableArray的文章,我看到的每一篇文章似乎都有大量的代码来实现如此简单的东西。
在实例化viewDidLoad之后,我将其添加到myArray中:
// Add KVO for array
[self.saveButton addObserver:self forKeyPath:@"myArray" options:(NSKeyValueObservingOptionInitial) context:nil];我添加此方法是为了在myArray发生更改时执行一些操作
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"myArray"]) {
if (self.myArray.count > 0) {
NSLog(@"KVO: myArray.count > 0");
[self.saveButton setEnabled:YES];
} else {
NSLog(@"KVO: myArray.count is ZERO");
[self.saveButton setEnabled:NO];
}
}
}我知道我错过了一些简单的东西,但事实证明是难以捉摸的。
发布于 2015-05-21 15:26:06
如果只能通过didSelectRowAtIndexPath编辑数组,那么为什么不只是启用/禁用那里的按钮呢?
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//current code
if (self.myArray.count > 0) {
NSLog(@"KVO: myArray.count > 0");
[self.saveButton setEnabled:YES];
} else {
NSLog(@"KVO: myArray.count is ZERO");
[self.saveButton setEnabled:NO];
}
}发布于 2015-05-21 16:05:26
问题是,NSMutableArray不尊重KVO,因此,如果正确访问数组,则观察关键路径计数不会使work.This工作:
something = [self mutableArrayValueForKey:@"a"];
[something addObject:foo];你可以在这里得到答案:KVO With NSMutableArray
Observing count in NSMutableArray
关于NSMutableArray中的中文观察计数,您可以在以下网址上得到答复:
变化
// Add KVO for array
[self.saveButton addObserver:self forKeyPath:@"myArray" options:(NSKeyValueObservingOptionInitial) context:nil];至
// Add KVO for array
[self addObserver:self forKeyPath:@"myArray" options:(NSKeyValueObservingOptionInitial) context:nil];https://stackoverflow.com/questions/30377912
复制相似问题