通知名から信号を作成するにはどうすればよいですか?通知付きReactive Cocoaの使用方法
RACExtensionsで[signalForName(kTTCurrentUserLoggedOffNotification) subscribeNext:^(id x){
...
}];
通知名から信号を作成するにはどうすればよいですか?通知付きReactive Cocoaの使用方法
RACExtensionsで[signalForName(kTTCurrentUserLoggedOffNotification) subscribeNext:^(id x){
...
}];
-[NSNotificationCenter rac_addObserverForName:object:]
は無限の信号を返します。あなたは無限に述べたように、この信号がある
NSNotificationCenter.defaultCenter()
.rac_addObserverForName(UIKeyboardWillShowNotification, object: nil)
.takeUntil(self.rac_willDeallocSignal())
.subscribeNext { (_) in
print("Notification received")
}
スウィフトこの
Objective-Cのようにそれに
[[[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIApplicationDidEnterBackgroundNotification object:nil]
takeUntil:[self rac_willDeallocSignal]]
subscribeNext:^(id x) {
NSLog(@"Notification received");
}];
を購読することができます。あなたがself
の寿命に拘束されることに、この信号/サブスクリプションが必要な場合は、次のようにrac_willDeallocSignal
でtakeUntil:
を追加することができます。
Objective-Cの
[[[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIApplicationDidEnterBackgroundNotification object:nil]
takeUntil:[self rac_willDeallocSignal]]
subscribeNext:^(id x) {
NSLog(@"Notification received");
}];
スウィフト
NSNotificationCenter.defaultCenter()
.rac_addObserverForName(UIKeyboardWillShowNotification, object: nil)
.takeUntil(self.rac_willDeallocSignal())
.subscribeNext { (_) in
print("Notification received")
}
あなたがNSNotificationCenter (RACSupport)
カテゴリを見つけることができますのようなものに
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(userDidChange:)
name:kTTCurrentUserLoggedOffNotification
object:nil];
:たとえば、私はから行きたいです。これには、この目的のためのメソッドがあります。
- (RACSignal *)rac_addObserverForName:(NSString *)notificationName
object:(id)object;
Swift
バージョン使用ReactiveCocoa 4.1
:
これは確かにうまくいくようです。しかし、このようにしなければならない場合、その方法は根本的に欠陥があります。信号はそれらへの参照があるまで生きています。信号が解放された場合は、それを廃棄してオブザーバを取り除く必要があります。あなたのコードを見回すかもしれません、それが割り当て解除されないようにする信号への強い参照があるかもしれません。そうでない場合は、私の意見では期待された動作ではないため、問題をプロジェクトに報告してください。 – allprog
@allprog [購読者は、完了、エラー、または廃棄までシグナルを保持します(https://github.com/ReactiveCocoa/ReactiveCocoa/blob/master/Documentation/MemoryManagement.md)。だからこそ、無限の信号がかなり耳障りになることがあります。 '-takeUntil:'はよい解決策です。ある点で確定的に信号を終了させるようなものです。 –
@ JustinSpahr-Summers清算をありがとう。私はあまりにも狼を叫ぶのに熱望していたことを知っていた!しかし、あなたは私を修正するためにそこにいます。 :)ドキュメントにはこれらの複雑さが含まれていますか?例えば。 「これは無限の信号です」と、何が考慮に入れる必要があるかを示す何らかの記述へのポインタを与える。私は正直言ってフレームワークはこれらの "ブービートラップ"のいくつかを持っているようで、これらのケースで返される信号の詳細が強調されればよいでしょう。 – allprog