2011-11-17 11 views
5

Come è possibile memorizzare/recuperare uno CGFloat come proprietà di una sottoclasse UIImageView? Posso impostare il suo valore ma quando lo recupero, è corrotto. Le proprietà NSString funzionano bene.CGFloat come proprietà

.h

@property CGFloat myFloat; 

.m

[sender setMyFloat:someFloat]; 
[sender myFloat]; //<- corrupt? 

** * *** *** AGGIORNAMENTO * ** * *** ****

Volevo ringraziarvi per tutti i tuoi suggerimenti, erano tutti corretti. Il mio problema era più complesso di quanto pensassi. Il mittente è un UIPanGestureRecognizer collegato a UIImageview con cui avevo problemi. UIPanGestureRecognizer chiama il muovere del selettore: (id) mittente e questo è dove si trova il mio problema.

All'interno mossa: ho potuto svolgere con successo:

[[sender view] setMyString:@"test"]; 

e recuperare indietro con

[[sender view] myString]; 

non ho potuto però impostare o recuperare qualsiasi proprietà float a tutti senza includere (id) di sé. Per esempio:

[[sender view] setMyString:@"test"]; //->works 

[[sender view] setMyFloat:1.0f]; //->does not work 

Ma questo funziona:

[[[sender view]self] setMyFloat:1.0f]; //->works 

Questa è la cosa strana che mi ha portato a credere che stavo avendo un problema con il mio fusione galleggiante! Possiedo diverse proprietà NSString e ritornano perfettamente ma i CGFloats no. Qualcuno potrebbe spiegarmi perché in qualche modo ottengo il successo con gli archi ma il galleggiante si perde qui?

+1

Come si manifesta la corruzione? – Eimantas

+0

Sto impostando un valore compreso tra -.5 e .5, Viene restituito come 0.0 o -2.000001 – user973984

+2

È necessario fornire un contesto per queste due righe di codice, o tutto quello che possiamo fare è fare ipotesi, che non è particolarmente costruttivo. Ecco un'ipotesi: stai ricevendo il _same_'UIImageView' da entrambi i puntatori del 'sender'? –

risposta

3

ANSWER # 2: NSLog sintassi?

Come si convalida il valore dopo che è stato impostato? Se si utilizza NSLog assicurarsi di avere il codice del formato giusto per un flottante (ad esempio NSLog(@"new float value = %f", myFloat)

RISPOSTA ORIGINALE:. Setter sbagliato (era errore di battitura in questione)

Si chiama il metodo setter sbagliata e la correttezza setter. è:

`[sender setMyFloat:someFloat]` 

EDIT: OP ha aggiornato la sua domanda per rimuovere l'errore di battitura

+0

Solo un errore di battitura, mi dispiace. Ho ancora bisogno della risposta. – user973984

+0

quella sarebbe la risposta se l'errore di battitura era nel codice effettivo. se c'è un altro problema, inserisci più codice. il file .h e il file .m se disponi di un setter personalizzato sarebbe utile. – XJones

+0

Hai diritto, hai offerto la risposta corretta alla domanda postata. Grazie. – user973984

1

si dovrebbe scrivere @synthesize myFloat nel vostro .m per creare getter/setter per ivar

+0

questa è una buona pratica ma facoltativa. il getter/setter può essere definito manualmente. OP non sarebbe in grado di compilare senza un getter/setter valido con la proprietà definita. – XJones

+0

Hai ragione, ma ho assunto che setter/getter non siano implementati manualmente a destra –

+0

, ma l'app non si compilerebbe (senza avvertimenti) in questo modo. e se l'app è stata eseguita senza l'impostazione del setter, l'app si arresterebbe in modo anomalo poiché l'oggetto non implementa il setter. Dipende da cosa OP significa corrotto. Non molte informazioni qui. – XJones

2

Prova:

.h: 

@interface SomeClass : UIImageView { 
    CGFloat _someFloat; 
} 

@property (nonatomic) CGFloat someFloat; 

@end 

.m: 

@implementation SomeClass 
@synthesize someFloat = _someFloat; 
... 
... 
... 
@end 
+3

Puoi spiegare perché pensi che questo risolva il problema dell'OP? –

+0

Il problema è abbastanza vago, non ha aggiunto molto codice in generale. Questo codice esatto funziona per me (anche compilato e provato) quindi se dovesse provare a usare questo codice e non dovesse funzionare, almeno ci darebbe maggiori informazioni almeno sulla fonte del problema (sento che il problema è il logging ma non ha risposto) – DanZimm

Problemi correlati