9

böyle RACable kullanıyorum edin: (sinyal yangın neden değişiklikten önce)"Eski değeri" bir ReactiveCocoa sinyalinden nasıl alırım?

Ben myProp eski değerini erişebilir nasıl
[RACAbleWithStart(self.myProp) subscribeNext:^(id x) { 
    // Do stuff 

}]; 

? Bu yüzden bu gibi erişebilirsiniz:

[RACAbleWithStart(self.myProp) subscribeNext:^(id x) { 
    // Do stuff 
    id newValue = x; 
    id oldValue = RAC_oldValue; 
}]; 
+0

Neden sadece Kvo kullanılır? Reaktif Modeller x, x değil, değişikliklerle ilgilenir. 'RACAbleWithStart()', yaptığını düşündüğün şeyi yapmaz: Yeni bir sinyal oluşturur, ancak ateşin değişmesini beklemek yerine, x'in ilk değeriyle doldurur. Hiçbir şey hatırlamıyor, ve size değişken durumun görüşlerini "öncesi ve sonrası" vermesi amaçlanmamıştır. – CodaFi

+0

@CodaFi RACAbleWithStart'ın eski değeri vermesini beklemiyorum. Abonenin ateşini hemen aldığını biliyorum. Ben ReactiveCocoa KVO etrafında sarıcı kullanmak için daha kolay olarak tasarlanmış olduğundan, eski değere erişmek için bir yol olup olmadığını kontrol etmek için bu soru soruyorum. – zakdances

+2

Evet, KVO'nun etrafındaki sarıcıdır, ama dediğim gibi, reaktif desenler eski değerlerle uğraşmazlar, değişiklikler ve yeni değerler ile uğraşırlar. Eski bir değeri kaydetmeye yakın bir şeye ihtiyacınız varsa, RACRblelaySubject aracılığıyla RACAbleWithStart() ilişkinizi çalıştırın (mükemmel değil, ancak işe yarayacaktır). – CodaFi

cevap

4

Ben başarı ile bu pasajı kullandık:

[[object rac_valuesAndChangesForKeyPath:@"property" options:NSKeyValueObservingOptionOld observer:self] subscribeNext:^(RACTuple *tuple) { 
    id newObject = tuple.first; 
    NSDictionary *change = tuple.second; 
    id oldObject = change[NSKeyValueChangeOldKey]; 
}]; 

Kaynak: ReactiveCocoa documentation

İlgili konular