внутренняя ошибка компилятора: ошибка шины: 10 - PullRequest
0 голосов
/ 24 января 2012

Я написал код для анимации, который потрясает UIImageView на экране, но, хотя синтаксис кажется правильным, я получаю неясный "internal compiler error: Bus error: 10" при сборке.Есть идеи почему?

-(IBAction)shakeCircle{
    int d = 3;
    [UIView animateWithDuration:0.05
    animations:^{myCircle.center = CGPointMake(myCircle.center.x+d, myCircle.center.y-d);}
    completion:^(BOOL finished){
    [UIView animateWithDuration:0.05
    animations:^{myCircle.center = CGPointMake(myCircle.center.x-d, myCircle.center.y+d);}
    completion:^(BOOL finished)
    {
        //but if I comment from here..
        [UIView animateWithDuration:0.05
        animations:^{myCircle.center = CGPointMake(myCircle.center.x+d, myCircle.center.y-d);}
        completion:^(BOOL finished){
        [UIView animateWithDuration:0.05
        animations:^{myCircle.center = CGPointMake(myCircle.center.x-d, myCircle.center.y+d);}
        ];
        }
        ];
        //... to here the code will build.

    }
    ];
    }
    ];
}

Обратите внимание, что, если я закомментирую последние пять строк кода анимации, все скомпилируется нормально ... Что происходит ?

Я пыталсяпереключение на разные компиляторы, это не сработало.Я удостоверился, что есть только один myCircle и что единственный раз, когда на него ссылаются, когда это объявляется, и в этом методе!

1 Ответ

0 голосов
/ 25 января 2012

Вот небольшой обходной путь, который решает проблему с помощью рекурсивных вызовов функции. Присвойте int d сумму, на которую нужно потрясти, затем

int d = 3;
-(IBAction)shakeMyCircle{
    [UIView animateWithDuration:0.05
    animations:^{myCircle.center = CGPointMake(myCircle.center.x+3, myCircle.center.y-3);}
    completion:^(BOOL finished){
        [UIView animateWithDuration:0.05
        animations:^{myCircle.center = CGPointMake(myCircle.center.x-3, myCircle.center.y+3);}
        completion:^(BOOL finished) 
        {   
            d--;
            if(d>0) [self shakemyCircle];
            if(d == 0) d = 3;
        }
        ];
    }
    ];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...