2010-01-19 3 views
5

Donc, j'ai une classe (IKImageView) avec un tas de propriétés.L'assignation multiple est-elle un hack dans Obj-C?

Je sais que vue setProp: BOOL renvoie void. Cependant:

BOOL b = view.prop = NO; 

semble fonctionner. Si j'avais une fonction f() qui retourne un booléen, personne ne sait si cela fait vraiment:

[view setProp:f()]; 
Bool b = [view getProp]; 

ou

[view setProp: f()]; 
Bool b = f(); 

ou

BOOL TMP = f(); 
[view setProp: TMP]; 
BOOL b = TMP; 

Je demande parce que quand je faire:

BOOL b = view.hasHorizontalScroller = YES; 
NSLog(@"b is %d scroll is %d", b, [view getHasHorizontalScroller]); 

Je reçois "b is 1, sc rouleau est 0" (ce qui signifie que setHasHorizontalScroller échoue pour une raison quelconque, mais b est réglée correctement)

mais:

BOOL b; 
[view setHasHorizontalScroller: YES]; 
b = [view getHasHorizontalScroller]; 
NSLog(@"b is %d scroll is %d", b, [view getHasHorizontalScroller]); 

je reçois "b est 0 scroll est 0"

Ceci est très confus pour moi. (Aussi, si quelqu'un peut me dire comment le réglage de la propriété YES échoue, mais il réussit à mettre en b ... et pourtant aucune erreur venir ...

+1

fichier un bug, s'il vous plaît. Un exemple minimal serait très utile. http://bugreport.apple.com/ – bbum

+0

c'est un peu l'exemple minimal ... J'ai ajouté du code à IKImageViewDemo qui est venu avec le système ... et je viens de déposer un bug, merci pour la suggestion. –

Répondre

5

Il est fait

BOOL TMP = f(); 
[view setProp: TMP]; 
BOOL b = TMP; 

. On a discuté de cela avant les propriétés expédiées Certains gens pensé que ce devrait être une erreur de compilation pour éviter l'ambiguïté

Il est probablement préférable d'éviter la construction entièrement

+0

Ok, bien ça explique au moins ce qui se passe, sinon pourquoi le setter échoue ... merci. –

0

On dirait que pas un bug code suivant...:

a.text = b.text = c.text; 

produit ces méthodes appelle:

// [c text] 
// [b setText:] 
// [a setText:] 

Comme vous pouvez le voir [b text] n'est pas appelé dans cette chaîne :(