問題タブ [reactive-cocoa]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
3516 参照

objective-c - Objective-C の self->_ivar アクセスと明示的 vs 暗黙的 self->

一般的な問題

self->_ivar今までは、は に等しいと思っていました_ivar。今日、これが完全に真実ではないことがわかりました。

たとえば、次のコード スニペットを参照してください。

という名前のself一部でオリジナルを隠したとしても、暗黙のivar構文は依然として「オリジナルの」自己を見つけますが、明らかにそうではありません。後者の場合、コンパイラは正しく不平を言いますNSIntegerself_testIVarself->_testIVar

メンバー参照型 'NSInteger' (別名 'long') はポインターではありません

ただし、最初のケースでは、それは機能します。

現実世界の問題

この例はかなり人工的に見えるかもしれませんが、まったくそうではありません。たとえば、ExtObjCプロジェクト ( ReactiveCocoaで使用) は、非常に便利な構文を定義することで、ブロック内 (@weakify(var)および他のオブジェクト)@strongify(var)を強くキャプチャするのを防ぐのに役立つ非常に便利selfな構文を定義しています (奇妙で面倒な構文を記述する必要は__weak typeof(self) weakSelf = self; [...] ^{ __strong typeof(self) strongSelf = weakSelf; [...] } もうありません)。例えば:

とがない@weakify@strongify、ブロックは への強い参照をキャプチャしselfます。で@weakify@strongifyそうではありません。したがって、selfブロックが実行されるまで、の割り当て解除は延期されません。ただし、主な利点は、「オリジナル」が隠されているため、 weakSelforstrongSelfの代わりに使用することを覚えておく必要がないことです。selfself

これは非常に便利です。ExtObjC は、マクロを使用して次のようなものを生成することで@weakify/を実装します。@strongify

selfへの強い参照を実際に取得せずに使い続けることができるので、それはさらに良いことselfです。しかし、implicit-ivars-of-self-syntax を使用するとすぐに、「オリジナル」への強い参照selfが引き続きキャプチャされます。

その他

ブロックで ivar を使用する場合、確実に をキャプチャしていますself。たとえば、次のスクリーンショットを参照してください 未使用およびキャプチャされた自己

スクリーンショットのもう 1 つの興味深い点は、警告メッセージが

未使用の変数「自己」

そして下の行で

このブロックで「自己」を強くキャプチャすると、保持サイクルが発生する可能性があります

そのため、2つのバージョンがあると思いますself:-)

質問

ここでの実際の質問は次のとおりです。正確には_testIVarどういう意味ですか? 「元の」selfポインタをどのように見つけるのですか?

明確にするために(私のスクリーンショットも参照してください):@MartinRが指摘したように(これは私もそう思います)、self変更できず、暗黙的な自己ivarアクセス​​にのみ使用される特別なバージョンがあります。それはどこかに文書化されていますか?基本的に、暗黙の参照先はどこで定義されていselfますか? たとえば Java と同じように動作するように見えますが ( を使用)、オーバーライドできない予約済みキーワードであるというthis違いがあります。this

問題は、それを「修正」する方法でもありません。 /の例self->_testIVarで私が望むのは、ただ書くだけです。/を使用することで、暗黙的に強力にキャプチャするという間違いを犯すことはできなくなりましたが、そうではないようです。@weakify@strongify@weakify@strongifyself

0 投票する
1 に答える
2878 参照

objective-c - オブジェクトの NSArray の RACSignal

ViewController に ViewModel オブジェクトの NSArray があります。

@property (非アトミック、強力) NSArray *viewModels;

ViewModel オブジェクトは次のようになります。

RACCommand の init メソッドで enabledSignal の RACSignal を作成しようとしています。

このシグナルは、選択された viewModel オブジェクトが 0 であるか、選択された viewModel の数が viewModel の総数と等しい場合に有効になるように Command に指示します。

このコードで選択された viewModel オブジェクトを提供する RACSequence を作成できます。

有効な信号を作成するにはどうすればよいですか?

0 投票する
1 に答える
2081 参照

objective-c - ReactiveCocoa: subscribeNext: ブロックの状態を削除

VC に次のコードがあります。

yContentOffset削除しようとしている VC のプロパティはどこにありますか。(検索モードに入る前にコンテンツ オフセットを保存し、後で復元します)。

試してみまし[RACSignal if: then: else:]たが、完全には取得できませんでした。

0 投票する
0 に答える
307 参照

reactive-cocoa - ReactiveCocoa の Kiwi テストでは EXC_BAD_ACCESS が生成されます

Kiwi フレームワークで ReactiveCocoa コードをテストしようとしています。

コードは次のとおりです。

ここにテストケースがあります

テスト ケースを実行するたびに、オブザーバーを追加しようとすると、RACKVOTrampoline クラスで EXC_BAD_ACCESS が発生します。

助言がありますか?

製品コードは ReactiveCocoa で問題なく動作します。

0 投票する
2 に答える
1081 参照

ios - ReactiveCocoaで複数のプロパティに影響を与える方法は?

で複数のプロパティに影響を与え、コマンドをアクティブにしたいと思いますUIButton

これを行う最善の方法について推論しようとしていますが、いくつかの入力を使用できます。

ここに私が持っているものがあります:

これは機能しますが、推奨事項を聞きたいです。

0 投票する
2 に答える
1890 参照

ios - ReactiveCocoa の使用中にエラー ブロックが呼び出されない

何らかの理由で、エラー メッセージが表示されません。(要点をわかりやすくするために、ここではコードを単純化しました。)

これは「B」を出力します。理由はありますか?サブスクライバーで呼び出された場合-sendError:、完了ブロックがそれを受け取るのはなぜですか?