2011-11-17 20 views
5

¿Cómo puedo almacenar/recuperar un CGFloat como una propiedad de una subclase UIImageView? Puedo establecer su valor, pero cuando lo recupero, está dañado. NSString propiedades funcionan bien.CGFloat como propiedad

.h

@property CGFloat myFloat; 

.m

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

** * ** * ** * ACTUALIZACIÓN * ** * ** * ****

quería darle las gracias por todas sus sugerencias, que eran los correctos. Mi problema era más complejo de lo que pensaba. El remitente es un UIPanGestureRecognizer adjunto al UIImageview con el que estaba teniendo problemas. El UIPanGestureRecognizer llama al selector mover: (id) remitente y aquí es donde está mi problema.

Dentro de movimiento: yo podría realizar con éxito:

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

y recuperar de nuevo con

[[sender view] myString]; 

no podía sin embargo establecer o recuperar cualquier propiedad float en absoluto sin incluir auto (id). Por ejemplo:

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

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

Pero esto funciona:

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

Esta es la parte extraña que me llevó a creer que estaba teniendo un problema con mi colada flotante! Tengo varias propiedades de NSString y vuelven bien pero CGFloats no. ¿Podría alguien explicarme por qué de alguna manera alcanzo el éxito con cuerdas pero el carro se pierde aquí?

+1

¿Cómo se manifiesta la corrupción? – Eimantas

+0

Estoy estableciendo un valor entre -.5 y .5, o se devuelve como 0.0 o -2.000001 – user973984

+2

Debe proporcionar el contexto para esas dos líneas de código, o todo lo que podemos hacer es tomar conjeturas, que no es particularmente constructivo Aquí hay una conjetura: ¿estás obteniendo el _same_ 'UIImageView' de ambos punteros' sender'? –

Respuesta

3

RESPUESTA # 2: sintaxis NSLog?

¿Cómo está validando el valor después de establecerlo? Si está utilizando NSLog asegurarse de que tiene el código de formato correcto para un flotador (por ejemplo NSLog(@"new float value = %f", myFloat)

respuesta original:. Colocador mal (era errata en cuestión)

Está llamando al método setter incorrecta El colocador correcta. es:

`[sender setMyFloat:someFloat]` 

EDIT: OP ha actualizado su pregunta para eliminar el error tipográfico

+0

Solo un error tipográfico, lo siento. Aún necesito la respuesta. – user973984

+0

esa sería la respuesta si el error tipográfico estaba en su código actual. si hay otro problema, los pls publicarán más código. el archivo .h y el archivo .m si tiene un setter personalizado sería útil. – XJones

+0

Tu derecho, ofreciste la respuesta correcta a la pregunta publicada. Gracias. – user973984

1

debe escribir en su @synthesize myFloat .m para crear captador/definidor de Ivar

+0

eso es una buena práctica pero opcional. el getter/setter se puede definir manualmente. OP no podría compilar sin un getter/setter válido con la propiedad definida. – XJones

+0

Tiene razón, pero supuse que setter/getter no se implementa manualmente –

+0

, pero la aplicación no compilará (sin advertencias) de esa manera. y si la aplicación se ejecutó sin que se establezca el colocador, la aplicación se bloqueará ya que el objeto no implementa el colocador. Depende de lo que OP significa por corrupto. No hay mucha información aquí. – XJones

2

Pruebe esto:

.h: 

@interface SomeClass : UIImageView { 
    CGFloat _someFloat; 
} 

@property (nonatomic) CGFloat someFloat; 

@end 

.m: 

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

¿Puedes explicar por qué crees que esto resolverá el problema del OP? –

+0

El problema es bastante vago, no agregó mucho código en general. Este código exacto funciona para mí (incluso compilado y probado), así que si intentara usar este código y no funcionara, al menos nos daría más información al menos sobre el origen del problema (creo que el problema es la tala pero él no ha respondido) – DanZimm

Cuestiones relacionadas