2012-04-06 4 views
8

Ich habe den folgenden Code verwendet, um Ansichten zu verschieben, und hatte nie ein Problem. Ich begann ARC in meinem Projekt zum ersten Mal zu verwenden und ich bekomme den folgenden Fehler in der zweiten Zeile. "Schreibgeschützte Variable ist nicht zuweisbar"Objective-C - Schreibgeschützte Variable ist nicht zuweisbar?

Soll ich das mit ARC anders machen?

CGRect rect = self.frame; 

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

Der Code ist vollkommen legal. Sie sollten den Fehler nicht finden. Gibt es noch etwas, das Sie weggelassen haben, das dieses Problem verursacht haben könnte? –

+0

Große Frage und tolle Antwort. Vielen Dank! – RileyE

Antwort

22

Das Problem war, dass ich das CGRect in einem Animationsblock verwendete. Markierung der Variablen mit __block löste mein Problem

__block CGRect rect = self.frame; 
+1

Sie können auch die CGRect-Variable in den Block selbst einfügen, da Sie damit nur den Rahmen von self bearbeiten. Dies würde den Code leichter lesbar machen. – ikuramedia

+0

Hängt davon ab .... wenn sich der Rahmen des Selbst ändert * nachdem * die Animation startet, dann würde das, was @ikuragames vorschlägt, das Verhalten des Codes ändern. Was araxt vorschlägt, ist genau das gleiche Verhalten wie das, was OP an erster Stelle geschrieben hat. – bbum

+0

Ich habe es nicht im Block platziert, weil es auch außerhalb meines Blocks verwendet wird. – aryaxt