У меня странная проблема, когда UIPopovercontroller немедленно освобождает свой контроллер представления контента после загрузки всплывающего окна, а затем повторно инициализирует его.
Моя цель - прочитать текстовое поле, когда всплывающее окно закрыто.
У меня сложилось впечатление, что я создаю UIViewController и устанавливаю его в качестве контроллера представления контента для всплывающего окна. После этого PopoverViewController сохранит контроллер представления контента, и я могу (автоматически) освободить его.
Позже, когда всплывающее окно отклоняется, оно освобождает всплывающее окно (и вместе с ним контроллер представления содержимого). Но это не работает. Это мой соответствующий код:
- (IBAction)popoverButton:(id)sender {
// Create & Initialize content view controller
ContentViewController* cvc = [[[ContentViewController alloc] initWithNibName:@"ContentViewController" bundle:nil] autorelease];
// Create, initialize and load popover
popoverController = [[UIPopoverController alloc] initWithContentViewController:cvc];
[popoverController setDelegate:self];
[popoverController presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
NSLog(@"popoverButton: %@, retainCount: %d", cvc, [cvc retainCount]);
}
- (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)senderPopoverController
{
NSLog(@"popover should dismiss");
ContentViewController *dvc = (ContentViewController *)([popoverController contentViewController]);
NSLog(@"%@ %@ %@", dvc, [dvc testTextfield], [[[dvc testTextfield] text] description]);
return YES;
}
ContentViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
[[self testTextfield] setText:@"Bla"];
NSLog(@"viewDidLoad: %@", testTextfield);
}
- (void)dealloc {
NSLog(@"dealloc: %@", testTextfield);
[testTextfield release];
[super dealloc];
}
Когда я открываю поповер, Журнал будет (я думаю, что порядок вывода не соответствует порядку, когда он действительно вызывается):
Popover Test[2363:707] viewDidLoad: <UITextField: 0x185750; ...>
Popover Test[2363:707] viewDidLoad: (null)
Popover Test[2363:707] popoverButton: <ContentViewController: 0x1844e0>, retainCount: 4
Popover Test[2363:707] dealloc: <UITextField: 0x185750; ...>
И когда я отклоняю это:
Popover Test[2363:707] popover should dismiss
Popover Test[2363:707] <ContentViewController: 0x1844e0> (null) (null)
Popover Test[2363:707] popover did dismiss
Popover Test[2363:707] <UIPopoverController: 0x184860>
Popover Test[2363:707] dealloc: (null)
Так что мои вопросы будут:
- Почему ContentViewController освобождается и инициализируется во второй раз?
- Почему розетки (textField) больше не работают при второй загрузке?
Если бы я мог решить эту проблему, я мог бы читать из textField в popoverControllershouldDismissPopover