以下代码可以正常工作:

[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

如果有人能启发我这样做,我将非常感谢。

希望这对面临相同问题的其他人有用。

10-08 05:53