2011-08-26 54 views
0

我正在使用弹出窗口视图呈现大量您可以选择的标志。 我的代码有点问题,因为我打开这个popover内存后不久就没有发布(viewcontroller“flagsViewController”可以,干净,它会初始化并释放它里面的每一项内容。做错了什么?我怎样才能尽快酥料饼被关闭释放内存?发布需要大量内存的popover

-(void)presentFlags 
    { 
     [self.popoverController dismissPopoverAnimated:YES]; 

     FlagsViewController *controller = [[FlagsViewController alloc] 
              initWithNibName:@"FlagsViewController" 
              bundle:[NSBundle mainBundle]] ; 

     UINavigationController *container = [[UINavigationController alloc] initWithRootViewController:controller]; 

     UISegmentedControl *ctrl = [[UISegmentedControl alloc] initWithItems:segmentedItems]; 
     ctrl.frame = CGRectMake(0, 6, 500, 30); 
     [ctrl addTarget:self action:@selector(changeSeg:) forControlEvents:UIControlEventValueChanged]; 
     ctrl.segmentedControlStyle = UISegmentedControlStyleBar; 
     //ctrl.momentary = YES; 
     ctrl.tintColor = [UIColor darkGrayColor]; 
     UIImage *theImage = [UIImage imageNamed:@"highlight_country.png"]; 

     [ctrl setImage:theImage forSegmentAtIndex:0]; 

     [container.navigationBar addSubview:ctrl]; 
     [ctrl release]; 
     // 
     //create a popover controller 
     self.popoverController = [[[UIPopoverController alloc] 
            initWithContentViewController:container] autorelease]; 
     [container release]; 
     [popoverController setPopoverContentSize:CGSizeMake(500, 600)]; 
     //present the popover view non-modal with a 
     //refrence to the button pressed within the current view 
     [popoverController presentPopoverFromRect:CGRectMake(popoverArrowPossition, 0.0, 0.0, 52.0) inView:super.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 
     [controller release]; 
} 
+0

是你的应用程序崩溃?你有没有崩溃报告或错误信息? –

+0

你是否使用popoverControllerDelegate方法? – MishieMoo

回答

2

与UIPopoverController工作已经很困难,但我做了以下的酥料饼控制器的代表设置自解决了这个问题( popoverController.delegate = self)并将UIPopoverControllerDelegate协议添加到您的类标题

接下来,我实现了- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController委托方法,在这里我发布了popoverController并将其设置为nil。

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController { 
    [self.popoverController release]; 
    self.popoverController = nil; 
} 

请注意:如果您关闭通过代码酥料饼此委托方法将不会被调用(即使用dismissPopoverAnimated),如果用户通过酥料饼等

外攻驳斥它,它只会调用
+0

谢谢,这不是问题,但您的答案使我的代码更加优雅和正确。谢谢。 – chewy