2011-05-24 4 views
10

Important: Toutes les classes ne sont pas Conformité KVO pour toutes les propriétés. Vous assurer que vos propres classes sont KVO conformes en suivant les étapes décrites dans « KVO conformité. » En règle générale propriétés dans les cadres fournis par Apple ne sont KVO conformes si ils sont documentés en tant que tels.Quelle est la fiabilité de KVO avec UIKit

Cette déclaration me laisse perplexe. Ne pouvons-nous pas utiliser KVO pour les objets UIKit? Je ne me souviens pas avoir vu une propriété documentée comme conforme au KVO. Bien que je dise le contraire, je peux utiliser le KVO avec de nombreuses propriétés. Est-ce que cela signifie que je ne peux pas compter dessus?

Un aperçu de ceci serait apprécié.

Répondre

9

UIKit n'est généralement pas compatible avec KVO. C'est principalement parce que UIView agit en tant que wrapper de haut niveau pour CALayer, donc quand vous par exemple. changer la propriété frame d'un UIView, il va changer les couches frame mais laissez par exemple. la propriété bounds du UIView intacte, donc aucun observateur ne sera déclenché pour le chemin view.bounds, car il ne change jamais vraiment. Et cela conduit à la conformité non KVO. Ce n'est que si la propriété est conforme à la norme KVO que vous pouvez vous en remettre, sinon cela ne fonctionnera pas ou ne fonctionnera pas dans certains cas bizarres.

+0

Le cadre de UIView n'est pas lui-même stocké en tant que valeur. L'UIView stocke les limites et le point central. Si on vous demande "frame", UIView calcule la trame à partir des bornes et des valeurs du point central. – MacMark

+0

Je comprends parfaitement le raisonnement donné, mais le cadre UIView semble être conforme à la norme KVO et cela «me dérange vraiment». – Till

+0

@Till Mhhh, peut-être que Apple a changé les détails de l'implémentation dans les versions iOS plus récentes? Je ne sais pas, autant que je m'en souvienne, cela ne fonctionnait pas au moment où j'écrivais cette réponse. – JustSid

Questions connexes