【发布时间】:2012-01-30 22:57:22
【问题描述】:
我有一个奇怪的问题,即 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时,Log会是(我认为输出的顺序并不代表实际调用时的顺序):
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) 在第二次加载时不再工作?
如果我能解决这个问题,我就能从 popoverControllershouldDismissPopover
中的 textField 读取【问题讨论】:
标签: objective-c ios ipad uipopovercontroller