NSMutableDictionary çevresindeki kompozisyonu kullanarak bunu şimdi başarıyla uyguladım. Ne kadar küçük bir kod aldığına şaşırdım. Uyguladığım sınıf, bir tahta oyunundaki modeli temsil etmek için kullanılan bir tahtadır. Herkes addObserver arayarak kurulu devletler için değişikliklerine abone olabilir: yöntemini şöyle uygulanan: Yalnızca KVO modeliyle tuşları abone olabilir, ben aldattım
- (void)addObserver:(id)observer {
for (id key in grid)
[self addObserver:observer
forKeyPath:[key description]
options:0
context:key];
}
ve anahtarın açıklaması abone ancak anahtarın kendisini bağlam olarak geçmesi. Kartımın örneklerini gözlemleyen nesnelerde, keyPath dizesini yok saymak için -observeValueForKeyPath:ofObject:change:context:
uygular ve yalnızca gönderilen içeriği kullanır.
Benim basit Kurulu dersiniz bu yöntemi kullanarak oluşturduğunuz yapay özellikleri için KVO uyumlu olmadığı, bu nedenle KVO makine bu tuşların eski/yeni değerler elde etmeye çalışmak olmaz bu yüzden options
özelliğinde 0
geçti. Bu benim kodumun patlamasına neden olur.
- (void)setPiece:(id)piece atLocation:(Location*)loc {
[self willChangeValueForKey:[loc description]];
[grid setObject:piece forKey:loc];
[self didChangeValueForKey:[loc description]];
}
Voila: tahta değiştirir
şey harekete sıçrama KVO makine neden gerekli bildirimleri yükseltmek (benim basit sınıfta bu tek kişi yöntem vardır)! Dize olmayan anahtarlarla bir NSMutableDictionary aboneliği!
Teşekkürler. Bir NSMutableDictionary etrafında kompozisyonun gitmenin yolu olduğunu düşünüyorum. Anahtarlar NSStrings olmadıkça bu işi nasıl yapacağımı hala göremiyorum, ama muhtemelen bununla çalışabileceğimi düşünüyorum. –
@Quinn Taylor: Özel alt sınıfınızın bağlantısı ölü gibi görünüyor ve bu kodu kontrol etmem gerekiyor. Hala bir yerlerde asılı duruyor musun? – Cyrille