以下代码可以正常工作:
[RACObserve(self.person, firstName)
subscribeNext:^(id x) {
self.descriptionText = [self concatenateInformation];
}];
[RACObserve(self.person, lastName)
subscribeNext:^(id x) {
self.descriptionText = [self concatenateInformation];
}];
[RACObserve(self.person, primitiveIntegerAge)
subscribeNext:^(id x) {
self.descriptionText = [self concatenateInformation];
}];
- (NSString *)concatenateInformation {
return [NSString stringWithFormat:@"%@ %@: %d", self.person.firstName, self.person.lastName, self.person.primitiveIntegerAge];
}
有没有一种方法可以允许任何RACObserve更改使用RAC宏进行绑定来修改self.descriptionText?
我尝试了以下方法:
RAC(self, occupancySummaryText) =
[[RACSignal
merge:@[
RACObserve(self.person, firstName),
RACObserve(self.person, lastName),
RACObserve(self.person, primitiveIntegerAge) ]]
map:^id(id value) {
return [self concatenateInformation];
}];
并且,尽管它在应用程序运行时中运行,但在XCTest运行期间将失败,并显示如下错误:
* __36- [RACStream(Operations)flattenMap中的断言失败:] _ block_invoke_2(),/ Pods / ReactiveCocoa / ReactiveCocoaFramework / ReactiveCocoa / RACStream.m:75
* 由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'从-flattenMap:返回的值不是流:名称:'
如何以更优雅的方式实现上述目标?
最佳答案
尽管不知道它触发此错误的原因,但我找到了导致此问题的原因。
在我的Podfile中,我在应用程序和测试目标中都包含了ReactiveCocoa pod。从测试目标中移除ReactiveCocoa容器可以解决该问题。
原始版本存在问题:
target 'Application' do
pod 'ReactiveCocoa', '~> 2.3'
end
target 'ApplicationTests' do
pod 'ReactiveCocoa', '~> 2.3'
end
更新
target 'Application' do
pod 'ReactiveCocoa', '~> 2.3'
end
target 'ApplicationTests' do
end
如果有人能启发我这样做,我将非常感谢。
希望这对面临相同问题的其他人有用。