OStack程序员社区-中国程序员成长平台

标题: ios - 如何将属性与在多个 RACObserve 中的任何一个中发现的更改绑定(bind) [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 03:44
标题: ios - 如何将属性与在多个 RACObserve 中的任何一个中发现的更改绑定(bind)

以下代码可以正常工作:

[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-推荐答案


我找到了这个问题的原因,虽然我不知道它是如何触发这个错误的。

在我的 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/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4