我有一个带有按钮的视图控制器,如果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];
}
}
}
我知道我错过了一些简单的事情,但事实证明这是难以捉摸的。
答案 0 :(得分:1)
如果只能通过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];
}
}
答案 1 :(得分:0)
问题是NSMutableArray不尊重KVO,因此观察密钥路径计数将不起作用。如果正确访问数组,这将有效:
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];