Приложение вылетает при использовании setContentViewController в iOS 5 - PullRequest
0 голосов
/ 14 ноября 2011

Я делаю свое приложение совместимым с iOS 5, но приложение вылетает в коде, в котором я использовал setContentViewController.

Вот мой код.

[[ChoicesViewController sharedChoices] setCurrentValue:[[(UIButton *)sender titleLabel]  text]];

[self.choicesPopoverController setContentViewController:[ChoicesViewController sharedChoices]];

CGFloat popoverHeight = 44.0f * [[[ChoicesViewController sharedChoices] choices] count];

[self.choicesPopoverController setPopoverContentSize:CGSizeMake(380.0f, MIN(400.0f, popoverHeight))];

if ([self.choicesPopoverController isPopoverVisible]) {

    [self.choicesPopoverController dismissPopoverAnimated:YES];

} else {

    [self.choicesPopoverController presentPopoverFromRect:[(UIButton *)sender frame]

                                                   inView:self.view

                                 permittedArrowDirections:UIPopoverArrowDirectionAny

                                                 animated:YES];

}

вот что возвращает общий выбор:

static ChoicesViewController *_sharedChoices = nil;

 +(id)sharedChoices 
   {

    if (!_sharedChoices) 

        {
        _sharedChoices = [[[self class] alloc] init];
    }

    return _sharedChoices;
    }

// Когда я комментирую приведенный ниже код, приложение не будет зависать в iOS 5, но UIPopover тоже не отображается. И если я раскомментирую его, в iOS 5 произойдет сбой.

-(UIPopoverController *)choicesPopoverController 
{
if (!choicesPopoverController) 
     {

        choicesPopoverController = [[UIPopoverController alloc] initWithContentViewController:self];
     }

  return choicesPopoverController;
 }

Ответы [ 2 ]

1 голос
/ 14 ноября 2011

Вы говорите, что установили точки останова и обнаружили, что эта строка была проблемой:

[self.choicesPopoverController setContentViewController:[ChoicesViewController sharedChoices]];

но там происходит несколько вещей. Где происходит сбой, если вы измените эту строку на

id controller = self.choicesPopoverController;
id shared = [ChoicesViewController sharedChoices];
[controller setContentViewController:shared];

0 голосов
/ 15 ноября 2011

Наконец я нашел решение:

вместо записи

[self.choicesPopoverController setContentViewController: [ChoicesViewController sharedChoices]];

я сделал

choicesPopoverController = [[UIPopoverController alloc] initWithContentViewController: [ChoicesViewController sharedChoices]];

и закомментировал этот код

/ ** * 1013

-(UIPopoverController *)choicesPopoverController 
  {
    if (!choicesPopoverController) 
      {

          choicesPopoverController = [[UIPopoverController alloc] initWithContentViewController:self];
      }

   return choicesPopoverController;
 }

* /

Теперь это не вылетает в iOS 5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...