2010-01-19 4 views
5

Quindi, ho una classe (IKImageView) con un gruppo di proprietà.L'assegnamento multiplo è un hack in Obj-C?

So che la vista setProp: BOOL restituisce void. Tuttavia:

BOOL b = view.prop = NO; 

sembra funzionare. Se avessi avuto una funzione f() che restituisce un valore booleano, qualcuno sa se questo è davvero facendo:

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

o

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

o

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

chiedo perché quando ho do:

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

Ottengo "b è 1, sc roll è 0" (che significa che setHasHorizontalScroller sta venendo a mancare per qualche ragione, ma b è impostato correttamente)

ma:

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

ottengo "b è 0 di scorrimento è 0"

Questo è molto confusionario per me. (Inoltre, se qualcuno può dirmi come l'impostazione della proprietà a YES non riesce, ma poi riesce a impostare b ... eppure nessun errore venire ...

+1

aprire un bug, per favore. Un esempio minimo sarebbe molto utile. http://bugreport.apple.com/ – bbum

+0

che è una sorta di esempio minimo ... Ho aggiunto il codice all'IKImageViewDemo fornito con il sistema ... e ho appena archiviato un bug, grazie per il suggerimento. –

risposta

5

Sta facendo

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

. c'era discussione su questo prima di proprietà spediti Alcune persone pensato che questo dovrebbe essere un errore di compilazione per evitare l'ambiguità

probabilmente è meglio evitare la costruzione del tutto

+0

Ok, almeno questo spiega cosa sta succedendo, se non perché il setter fallisce ... grazie. –

0

Sembra che non è un bug seguente codice...:

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

produce questo metodi chiamate:

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

Come si può vedere [b text] non è chiamato in questa catena :(