2012-04-06 15 views
8

Sto usando il seguente codice per spostare le viste e non ho mai avuto problemi. Ho iniziato ad usare ARC nel mio progetto per la prima volta e sto ricevendo il seguente errore sulla seconda riga. "La variabile di sola lettura non è assegnabile"Objective-C - La variabile di sola lettura non è assegnabile?

Suppongo di farlo diversamente con ARC?

CGRect rect = self.frame; 

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

Il codice è perfettamente legale. Non dovresti incontrare l'errore. C'è qualcos'altro che hai omesso che potrebbe aver causato questo problema? –

+0

Ottima domanda e risposta eccezionale. Grazie! – RileyE

risposta

22

Il problema era che ero usando l'CGRect all'interno di un blocco di animazione. Contrassegnare la variabile con __block risolto il mio problema

__block CGRect rect = self.frame; 
+1

Si potrebbe anche inserire la variabile CGRect all'interno del blocco stesso, poiché la si usa solo per modificare il frame di 'self'. Ciò renderebbe il codice più facile da leggere. – ikuramedia

+0

Dipende .... se il frame di sé cambia * dopo * l'animazione inizia, quindi fare ciò che suggerisce @ikuragames cambierebbe il comportamento del codice. Ciò che l'araxt suggerisce è esattamente lo stesso comportamento di quello che OP ha scritto in primo luogo. – bbum

+0

Non l'ho inserito nel blocco perché viene utilizzato anche al di fuori del mio blocco – aryaxt

Problemi correlati