配列の変更を観察することはできません。ReactiveCocoa はキー値観測を使用します。名前が示すように、キー属性 (辞書メンバー、プロパティなど) の変更のみを監視します。
あなたができることは、変更の配列プロパティを観察することです:
@interface Blah : NSObject
@property (copy, readonly) NSArray *arrayProperty;
@end
// later...
Blah *blah = [Blah new];
[RACObserve(blah, arrayProperty) subscribeNext:^(NSArray *wholeArray){}];
挿入/削除されたオブジェクトを知りたい場合は、2 つのオプションがあります。各配列を保存し、それぞれを前の配列と比較することで解決できます。これは最も単純ですが、非常に大きな配列ではパフォーマンスが低下します。私の知る限り、ReactiveCocoaにはこれを行うための組み込み操作がありません。
または、KVO コレクション アクセサーを実装し、配列への変更がmutableArrayValueForKey:
. これにより、変更が行われるたびに新しい配列が作成されるのを回避し、また、によって返されるプロキシ配列に加えられた変更をオブザーバーに通知しmutableArrayValueForKey:
ます。
ReactiveCocoa を使用して変更情報を観察することは、もう少し複雑です。
RACSignal *changeSignal = [blah rac_valuesAndChangesForKeyPath:@keypath(blah, arrayProperty) options: NSKeyValueObservingOptionNew| NSKeyValueObservingOptionOld observer:nil];
[changeSignal subscribeNext:^(RACTuple *x){
NSArray *wholeArray = x.first;
NSDictionary *changeDictionary = x.second;
}];
変更ディクショナリは、配列に加えられた変更の種類、挿入/削除されたオブジェクト、および挿入/削除されたオブジェクトのインデックスを示します。
https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Protocols/NSKeyValueObserving_Protocol/Reference/Reference.htmlで文書化されています。