2013-09-26 3 views
1

Для меня это выглядит просто, но я не могу понять, какую ошибку я делаю. Я должен открыть popover в щелчке строки в моем приложении iPad. Я сделал следующий код:Ошибка при открытии popviewcontroller

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    popViewController *vc = [[popViewController alloc] initWithNibName:@"popViewController" bundle:nil]; 
    vc.preferredContentSize = CGSizeMake(500,500); 
    vc.view.frame = CGRectMake(0, 0, 500, 500); 

    UIPopoverController *healthPopOver = [[UIPopoverController alloc] initWithContentViewController:vc]; 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    [healthPopOver presentPopoverFromRect:cell.bounds inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
} 

Приложение аварийно завершает работу при завершении последней строки. Я искал много страниц в Google, но я не могу найти причину. Я не получаю какой-либо конкретной ошибки только ошибку Thread 1 в основном файле. Может кто-нибудь, пожалуйста, помогите мне. Это меня расстраивает. BTW Я использую iOS7.

С уважением
Панкай

+0

вы можете напечатать сообщение об ошибке? –

+1

Проблема заключается в том, что вы не сохраняете popover. Сохраните popover, как было предложено @null. –

ответ

1

Попробуйте добавить healthPopOverit членом вашего класса, так как UIPopoverControllers должны содержаться в переменной экземпляра.

В вашем .м определить его как свойство:

UIPopoverController *healthPopOver; 

и изменения:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 
    popViewController *vc = [[popViewController alloc] initWithNibName:@"popViewController" bundle:nil]; 
    vc.preferredContentSize = CGSizeMake(500,500); 
    vc.view.frame = CGRectMake(0, 0, 500, 500); 

    self.healthPopOver = [[UIPopoverController alloc] initWithContentViewController:vc]; 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    [healthPopOver presentPopoverFromRect:cell.bounds inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
} 
+0

спасибо, что это сработало ... Хотя это звучит довольно странно для меня. Вы знаете причину, почему это так? – pankaj

+1

@pankaj Я думаю, вы должны использовать ARC. Таким образом, ваша локальная переменная 'healthPopOver' будет выпущена ARC после завершения функции' tableView: didSelectRowAtIndexPath: '. Наличные деньги могут возникнуть по этому вопросу. – SFeng

+1

'UIPopoverController' не имеет супервизора, и он не может быть оставлен кем-либо, если вы его не сохраните, поэтому, выполняя' UIPopoverController * healthPopOver = [[UIPopoverController alloc] init ... ', эта переменная перестает области и объект освобождается, поскольку у него больше нет владельца, поэтому вам нужно его сохранить. – null

Смежные вопросы