2012-04-06 19 views
8

He estado utilizando el siguiente código para mover vistas, y nunca he tenido un problema. Empecé a usar ARC en mi proyecto por primera vez y recibo el siguiente error en la segunda línea. "La variable de solo lectura no es asignable"Objective-C: ¿La variable de solo lectura no es asignable?

¿Se supone que debo hacer esto de manera diferente con ARC?

CGRect rect = self.frame; 

[UIView animateWithDuration:0.4 animations:^{ 
    rect.origin.x = 57; 
    self.frame = rect; 
}]; 
+0

El código es perfectamente legal. No deberías encontrar el error. ¿Hay algo más que hayas omitido que pueda haber causado este problema? –

+0

Gran pregunta y respuesta increíble. ¡Gracias! – RileyE

Respuesta

22

El problema era que estaba usando el CGRect dentro de un bloque de animación. Marcar la variable con __block resuelto problema

__block CGRect rect = self.frame; 
+1

También podría colocar la variable CGRect dentro del bloque, ya que solo lo está usando para modificar el marco de 'self'. Esto haría que el código sea más fácil de leer. – ikuramedia

+0

Depende .... si el fotograma de uno mismo cambia * después de * la animación comienza, entonces hacer lo que @ikuragames sugiere podría cambiar el comportamiento del código. Lo que Araxt sugiere es exactamente el mismo comportamiento que lo que OP escribió en primer lugar. – bbum

+0

No lo coloqué en el bloque porque está siendo usado fuera de mi bloque también – aryaxt

Cuestiones relacionadas