Управление UIPopOver и ошибка USE_BLOCK_IN_FRAME

Недавно я обновился до бета-версии iOS 6, и у меня возникли некоторые проблемы. (Я знаю, что это бета-версия, но я еще не уверен, что это действительно связано с iOS 6.)

Задача имеет следующие параметры:

  1. Пользовательский UITableViewCell с UIButton объектами, которые генерируют UIPopOver объектов, представленных из кадра UIButton, который был нажат.
  2. Отображается UIPopOver, а затем iPad поворачивается.
  3. Мой вид отклоняет UIPopOver, когда анимация вращения завершается, а затем повторно отображает UIPopOver.

Релевантная информация:

  1. Первое вращение проходит нормально; UIPopOver закрывается и отображается правильно.
  2. Второе вращение (КАЖДЫЙ РАЗ) ломает приложение.
  3. У меня установлена ​​символическая точка останова, но я не получаю никакой полезной информации.
  4. Я делаю то же самое с UIPopOver объектами, представленными из UIBarButton объектов в UIToolbar. Я не испытываю проблем с этими переходами.
  5. Это новая проблема, связанная с кодом, который давно не менялся.
  6. Я получаю сообщение об ошибке: «предупреждение: попытка создать переменную USE_BLOCK_IN_FRAME с блоком, который не находится в кадре».

Вот код, который выполняется, связанный с вращением:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    if ([self PopOver]) {
        [[self PopOver] dismissPopoverAnimated:YES];
        [self setPopOver:nil];
        [self ButtonPressed:[self TouchedCell]];
    }
    [[self TableView1] reloadData];
    [[self TableView2] reloadData];
}

- (void)ButtonPressed:(Cell *)cell {
    [self setTouchedCell:cell];
    NSString *nibName = @"View";
    if (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad) {
        nibName = @"View-iPad";
    }

    ViewController *vc = [[ViewController alloc] initWithNibName:nibName
                                                          bundle:nil];
    if (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad) {
        UIPopoverController *popOver = [[UIPopoverController alloc]
            initWithContentViewController:vc];
        [self setPopOver:popOver];
        [popOver setDelegate:self];
        [[self PopOver] setPopoverContentSize:CGSizeMake(320, 320)];
        [popOver presentPopoverFromRect:[[cell CheckButton] frame] 
                                 inView:[cell contentView]
               permittedArrowDirections:UIPopoverArrowDirectionAny 
                               animated:YES];
    } else {
        // iPhone doesn't use PopOvers...
    }
}

Кто-нибудь знает, что мне делать дальше?


person mbm29414    schedule 02.07.2012    source источник
comment
Ячейка, из которой вы пытаетесь представить всплывающее окно, переместилась с экрана после перезагрузки таблицы?   -  person Jerry Jones    schedule 02.07.2012
comment
Мне придется проверить еще раз, но я не верю, что это так в конкретных тестах, которые я провел. Если я сделаю [tableView reloadData], не будет ли это означать, что любая ссылка на UITableViewCell может быть недействительной? Бьюсь об заклад, я пытаюсь представить это из (сейчас) несуществующей ячейки. Я проверю это и СПАСИБО, ЧТО ПОДНИМАЛИ МЕНЯ ДУМАТЬ В ПРАВИЛЬНОМ ПУТИ!!!   -  person mbm29414    schedule 02.07.2012
comment
@JerryJones Если вы оставите свой комментарий в качестве ответа, я приму его. Это было не совсем то, что решило это для меня, но это было достаточно близко, чтобы привести меня к правильному ответу (очевидно, я пытался показать PopOver из уже переработанного UITableViewCell). Спасибо!   -  person mbm29414    schedule 02.07.2012


Ответы (1)


Вот мой официальный ответ - я думаю, что ваш поповер пытается отобразить за кадром или, может быть, из уже переработанной ячейки. ;)

person Jerry Jones    schedule 02.07.2012