достигнуто, пока всплывающее окно все еще видно

-(void)showsearch:(id)sender
{
    SearchViewController *searchview =[[SearchViewController alloc] initWithNibName:@"SearchViewController" bundle:nil];

    settingpopoverController = [[[UIPopoverController alloc] 
                                    initWithContentViewController:searchview] autorelease];               
    [searchview release];
    [settingpopoverController presentPopoverFromBarButtonItem:sender 
                                    permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];


}

Когда я нажимаю кнопку, приложение вылетает, и я получаю сообщение [UIPopoverController dealloc] reached while popover is still visible..


person saturngod    schedule 24.10.2010    source источник
comment
вы, кажется, смешиваете view и controller. является SearchViewController контроллером, но вы называете его представлением.   -  person Ross    schedule 24.10.2010


Ответы (3)


думаю, что autorelease неверен, вот учебник

http://www.jannisnikoy.nl/index.php/2010/04/ipad-tutorial-creating-a-popoverviewcontroller

person Aaron Saunders    schedule 24.10.2010
comment
@saturngod рад быть полезным - person Aaron Saunders; 24.10.2010
comment
-1 Сообщение в блоге не объясняет, почему код постера завис. Это только учебник для всплывающих окон - person Sanjit Saluja; 30.04.2011
comment
@Sanjit Sauja, по сути, добавление autorelease в код ЯВЛЯЕТСЯ тем, что приводит к сбою кода. Либо вы retain свой UIPopoverController, либо испытываете сбой, о котором спрашивает ОП. - person Dan Rosenstark; 01.05.2011

Здесь есть хорошие обсуждения на эту тему:

Шаблон сохранения/освобождения для UIPopoverController, UIActionSheet и модального представления контроллеры?

UIPopoverController и управление памятью

Суть в том, что вам нужно:

  • назначьте свой автоматически выпущенный поповер сохраненному свойству
  • установите для свойства значение nil в Dealloc вашего представления
  • а также установить его равным нулю в файле popoverControllerDidDismissPopover.
person Chris    schedule 10.06.2011

Проблема в том, что вы устанавливаете

settingpopoverController =

когда ты собираешься сделать

self.settingpopoverController =

для которых автовыпуск был бы правильным. Второй использует методы доступа к свойствам, первый просто использует iVar.

person Dan Rosenstark    schedule 30.11.2010
comment
@Sanjit Saluja, в Obj-c 2.0 и более поздних версиях второй синтаксис - при условии, что это свойство сохранения - будет вызывать сохранение для UIPopoverController, для которого OP вызывает autorelease. В противном случае, когда текущий метод завершается, UIPopoverController автоматически освобождается, достигает счетчика сохранения, равного 0, и освобождается. Дайте мне знать, если вы думаете, что я что-то упустил. - person Dan Rosenstark; 30.04.2011