以下代码可以正常工作:
[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 更改中的任何一个只修改 self.descriptionText 使用 RAC 宏绑定(bind)它?
我尝试了以下方法:
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 返回的值:不是流:名称:”
如何以更优雅的方式实现上述目标?
Best Answer-推荐答案 strong>
我找到了这个问题的原因,虽然我不知道它是如何触发这个错误的。
在我的 Podfile 中,我在应用程序和测试目标中都包含了 ReactiveCocoa pod。从测试目标中移除 ReactiveCocoa pod 解决了这个问题。
原版有问题:
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
如果有人能告诉我为什么会这样,我将不胜感激。
希望这对面临同样问题的其他人有用。
关于ios - 如何将属性与在多个 RACObserve 中的任何一个中发现的更改绑定(bind),我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/27284563/
|