Enable/disable 基于 NSMutableArray 中计数的按钮
Enable/disable a button based on count in NSMutableArray
我有一个带有按钮的视图控制器,如果 myArray.count > 0
我想启用它。我最初让 KVO 工作,但它没有更新。
我的按钮 属性 在这里声明:
@property (strong, nonatomic) IBOutlet UIBarButtonItem *saveButton;
我想 enable/disable 基于数组中项目数的按钮:
@property (nonatomic, strong) NSMutableArray *myArray;
项目通过 didSelectRowAtIndexPath
added/removed 到数组
我发现了一些关于观察 NSMutableArray 的 post,我所看到的每个 post 似乎都有大量的代码来实现如此简单的东西。
我在 myArray
实例化后将其添加到 viewDidLoad
:
// 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];
}
}
}
我知道我遗漏了一些简单的东西,但事实证明是难以捉摸的。
如果只能通过 didSelectRowAtIndexPath
编辑数组,那么为什么不直接 enable/disable 那里的按钮。
-(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];
}
}
问题是 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];
我有一个带有按钮的视图控制器,如果 myArray.count > 0
我想启用它。我最初让 KVO 工作,但它没有更新。
我的按钮 属性 在这里声明:
@property (strong, nonatomic) IBOutlet UIBarButtonItem *saveButton;
我想 enable/disable 基于数组中项目数的按钮:
@property (nonatomic, strong) NSMutableArray *myArray;
项目通过 didSelectRowAtIndexPath
我发现了一些关于观察 NSMutableArray 的 post,我所看到的每个 post 似乎都有大量的代码来实现如此简单的东西。
我在 myArray
实例化后将其添加到 viewDidLoad
:
// 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];
}
}
}
我知道我遗漏了一些简单的东西,但事实证明是难以捉摸的。
如果只能通过 didSelectRowAtIndexPath
编辑数组,那么为什么不直接 enable/disable 那里的按钮。
-(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];
}
}
问题是 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];