2010-03-22 20 views
20

MVC uygulamasına sahibim. Model, NSSize numaralı bir özelliğe sahip bir özelliğe sahiptir. Şöyle yazılabilir:NSValue sihrini nasıl yapıyor?

- (void)setSize:(NSSize)aSize; 

görünümü anahtar-değer kodlama kullanarak bu NSSize ayarlar. Ancak şu anahtar-değer-kod bir yapı olabilir, bu yüzden böyle bir NSValue -Nesne sardı: erişimci bir NSValue bir yapı beklediğini değil, çünkü anladığım kadarıyla

[theView setValue:[NSValue valueWithSize:mySize] 
      forKey:@"theModel.size"]; 

, bu işe olmamalıdır . Ama mükemmel çalışıyor. Sihirli.

Bu nasıl olabilir? Burada

+1

+1 Bu önemli bir sorudur çünkü anahtar-değer kodlaması, Kakao çerçeveler hakkında gerçekten harika olan şeylerden biridir. Ayrıca, "sihirli" etiketi için +1! –

cevap

12

"Wrapping and Unwrapping Structs" aşağı kaydırın, ancak özü var:

setValue:forKey: belirtilen anahtar için uygun erişimcisine veya örnek değişkeni tarafından gerekli veri türünü belirler. Veri türü bir nesne değilse, değer, uygun -<type>Value yöntemini kullanarak geçirilen nesneden ayıklanır.

Btw, bu soruyu sorduğunuz için teşekkürler! Bu, her zaman "sadece işe yaramış" olan kakao şeylerden biridir ve nasıl başarıldığının açık olmadığını hiç düşünmemiştim.

+0

Bir şey değil. Açıkçası, bu aniden "sadece işe" geldiğinde beni havaya uçurdu. – bastibe