2012-04-06 3 views
8

Я использовал следующий код, чтобы перемещать просмотры вокруг и никогда не возникало проблем. Я начал использовать ARC в своем проекте в первый раз, и во второй строке получаю следующую ошибку. «Переменная, доступная только для чтения, не может быть назначена»Objective-C - переменная только для чтения не может быть назначена?

Должен ли я сделать это по-другому с ARC?

CGRect rect = self.frame; 

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

Код совершенно законный. Вы не должны сталкиваться с ошибкой. Есть ли что-то еще, что вы опустили, что могло вызвать эту проблему? –

+0

Большой вопрос и устрашающий ответ. Благодаря! – RileyE

ответ

22

Проблема была в том, что я использовал CGRect внутри блока анимации. Маркировка переменной __блоком решена моя проблема

__block CGRect rect = self.frame; 
+1

Вы также можете поместить переменную CGRect внутри самого блока, поскольку вы используете ее только для изменения рамки self. Это упростило бы чтение кода. – ikuramedia

+0

Зависит от того, если рамка self меняется * после того, как анимация начинается, а затем что-то, что предлагает @ikuragames, изменит поведение кода. То, что предлагает araxt, - это то же самое поведение, что и OP, в первую очередь. – bbum

+0

Я не размещал его в блоке, потому что он используется вне моего блока, а также – aryaxt

Смежные вопросы