iPhone: UILabel применяет CGAffineTransformMakeRotation, вызывая загадочный сбой

In

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil parentController:(GameViewController *)myGameController{

Создайте серию трансформирующихся этикеток, например:

    deg90 = 1.570796326794897;
//....transforms
    background.center = CGPointMake(160,230);
    background.transform = CGAffineTransformMakeRotation(deg90);

    BetLabel.text = @"test";       
    BetLabel.transform = CGAffineTransformMakeRotation(deg90);

Эта последняя строка разбивает меня:

2010-04-13 21:04:47.858 Game[1204:207] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSCFArray objectAtIndex:]: index (1) beyond bounds (1)'
2010-04-13 21:04:47.893 Game[1204:207] Stack: (
    864992541,
    859229716, (lots of numbers)

Но если я это прокомментирую, текст изменится нормально.

Обновление: О, только что провел тест... оказалось, что другие преобразования были в UIImageViews. По-видимому, вращение метки в этом xib вызывает сбой.

Но в другом файле преобразования работают нормально:

    newprofileentry.transform = CGAffineTransformMakeRotation(1.570796326794897);
    playerb0.transform = CGAffineTransformMakeRotation(1.570796326794897);
    playerb1.transform = CGAffineTransformMakeRotation(1.570796326794897);

Пробовал заменить deg90 полным значением с плавающей запятой, все тот же сбой.

Пробовал чистить кеш, перезапускать IB и Xcode, очищать все цели. Программа работала нормально, пока я не добавил эти метки. Пробовал удалять метку, читать и переподключать Розетку тоже.

Спасибо за чтение, надеюсь, у кого-то есть идея по этому поводу.

Ваше здоровье!


person Community    schedule 14.04.2010    source источник
comment
Ваше сообщение об ошибке означает, что ошибка где-то в управлении массивом - есть массив с одним элементом, а вы пытаетесь использовать второй элемент (с индексом 1). Вот почему я думаю, что вы ищете ошибку не в том месте. Может быть, у вас есть какие-то массивы в вашем коде?   -  person kpower    schedule 14.04.2010
comment
Спасибо за ответ. Я делаю. Я также добавляю метки в представление как подпредставления, но почему .transform влияет на это? Метки не находятся ни в одном массиве, кроме подвида. Пытался поместить этот код перед инициализацией массивов, но все равно сбой. У вас нет массивов только с размером 0 или 1. Кажется, это проблема с самим UILabel!   -  person quantumpotato    schedule 14.04.2010
comment
Вы пытались сделать @Test [NSString stringWithString: @Test]? Может происходить какая-то странная вещь, когда статическая строка получает недопустимую инициализацию метки/преобразования. Создав новую строку (помимо странной инициализации, выполненной для @Test), это может повлиять на то, как UIView обрабатывает преобразование. Я знаю. Немного там, но это легко попробовать.   -  person Steven Noyes    schedule 14.04.2010
comment
Пожалуйста, используйте M_PI/2 вместо 1.570796326794897.   -  person kennytm    schedule 14.04.2010


Ответы (1)


Я предлагаю переместить преобразования из initWithNib: Возможно, вы пытаетесь изменить что-то, чего еще не существует, потому что объекты в nib все еще инициализируются.

Вы также должны проверить файл пера (в Interface Builder или с помощью ibtool), чтобы увидеть, есть ли что-то зашифрованное с этой конкретной меткой. Чтобы проверить это, вы можете поменять его порядок при инициализации на другую метку, чтобы увидеть, связана ли проблема с этой конкретной меткой или с какой-либо меткой или объектом в последней позиции.

Размещение большего количества кода в контексте, вероятно, поможет.

person Community    schedule 14.04.2010
comment
Спасибо всем за ответы. Как ни странно, поставив newt = [[gametoken alloc] init]; [gametokens2 addObject:newt]; [выпуск тритона]; вместо внутри цикла for сделал свое дело. Не уверен, почему .. но теперь это работает. Сбой при доступе к индексу 1 этого объекта. Не знаю, почему ярлык связан с этим. Странная ошибка памяти? - person quantumpotato; 15.04.2010