Objective c 使用ReactiveCocoa根据NSSet对象计数启用按钮
我尝试使用ReactiveCocoa启用按钮,具体取决于NSMutableSet实例中的对象数是否大于零 我正在使用以下代码,但在运行时遇到崩溃。有什么想法吗Objective c 使用ReactiveCocoa根据NSSet对象计数启用按钮,objective-c,reactive-cocoa,Objective C,Reactive Cocoa,我尝试使用ReactiveCocoa启用按钮,具体取决于NSMutableSet实例中的对象数是否大于零 我正在使用以下代码,但在运行时遇到崩溃。有什么想法吗 RAC(self.navigationItem.leftBarButtonItem, enabled) = [RACSignal combineLatest:@[self.selectedRows] reduce:^(NSMutableSet *set){ return @([set count] > 0); }]; “N
RAC(self.navigationItem.leftBarButtonItem, enabled) = [RACSignal combineLatest:@[self.selectedRows] reduce:^(NSMutableSet *set){
return @([set count] > 0);
}];
“NSInvalidArgumentException”,原因:“-[\uu NSSetM map::]:无法识别的选择器发送到实例0x9671d10”您需要将
selectedRows
属性转换为信号:
RAC(self.navigationItem.leftBarButtonItem, enabled) = [RACSignal combineLatest:@[RACAbleWithStart(self.selectedRows)] reduce:^(NSMutableSet *set){
return @([set count] > 0);
}];
您需要将
selectedRows
属性转换为信号:
RAC(self.navigationItem.leftBarButtonItem, enabled) = [RACSignal combineLatest:@[RACAbleWithStart(self.selectedRows)] reduce:^(NSMutableSet *set){
return @([set count] > 0);
}];
得知NSarry、NSMUTABLEARRY不支持KVO,这让人很难过。在做类似的事情时 但幸运的是,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);
}];
得知NSarry、NSMUTABLEARRY不支持KVO,这让人很难过。在做类似的事情时 但幸运的是,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);
}];
当您
+combinelatetest:
时,数组是一个信号数组,而不是键路径。当您+combinelatetest:
时,数组是一个信号数组,而不是键路径。此外,根本不需要+combinelatetest:reduce:
。它可以用-map:
来编写。谢谢,这让我通过了崩溃,但在将对象添加到self.selectedRows
时,似乎没有启用按钮。提供一点上下文-这是一个删除按钮,当表格视图中的行高亮显示时应启用该按钮,当未选择任何内容时应禁用该按钮。@Alexander集合必须是,因为RACAble
只是美化了KVO。如果您正在就地修改集合(而不是替换它),则不会自动生成必要的通知。如果您将更改包装到selectedRows
,并使用[self-willChangeValueForKey:@“selectedRows”]
和[self-didChangeValueForKey:@“selectedRows”]
将上述代码完美地工作,这根本不需要+combineTest:reduce:
。它可以用-map:
来编写。谢谢,这让我通过了崩溃,但在将对象添加到self.selectedRows
时,似乎没有启用按钮。提供一点上下文-这是一个删除按钮,当表格视图中的行高亮显示时应启用该按钮,当未选择任何内容时应禁用该按钮。@Alexander集合必须是,因为RACAble
只是美化了KVO。如果您正在就地修改集合(而不是替换它),则不会自动生成必要的通知。如果您使用[self-willChangeValueForKey:@“selectedRows”]
和[self-didChangeValueForKey:@“selectedRows”]包装对selectedRows的更改,则上述代码将非常有效。