【问题标题】:Why am I still getting -[UIPopoverController dealloc] reached while popover is still visible为什么我仍然得到 -[UIPopoverController dealloc] 而 popover 仍然可见
【发布时间】:2013-10-14 13:20:14
【问题描述】:

得到以下错误:

-[UIPopoverController dealloc] 在 popover 仍然可见时到达。

这是导致问题的代码:

-(void) showModalTime:(int)tag {

    UIViewController* popoverContent = [[UIViewController alloc] init];
    UIView *popoverView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 216)];
    popoverView.backgroundColor = [UIColor redColor];
    popoverContent.contentSizeForViewInPopover = CGSizeMake(200.0, 216.0);

    //  smaller for timePicker
    timePicker=[[UIDatePicker alloc]init];
    timePicker.frame = CGRectMake(0, 0, 200, 216);

    timePicker.backgroundColor = UIColorFromRGB(0xeedd82);
    timePicker.datePickerMode = UIDatePickerModeTime;
    [timePicker setMinuteInterval:15];
    [timePicker addTarget:self action:@selector(dateDidChange:) forControlEvents:UIControlEventValueChanged];

    [popoverView addSubview:timePicker];
    popoverContent.view = popoverView;
    popoverController = [[UIPopoverController alloc] initWithContentViewController:popoverContent];
    popoverController.delegate = (id)self;  //  <--  this is the line that's causing the crash
    [popoverController setPopoverContentSize:CGSizeMake(200, 216) animated:NO];

    switch (tag)  {  //  displays the popover datepicker
        case 11:  //  store open time
            [timePicker setTag:11];
            [popoverController presentPopoverFromRect:tfShopOpens.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
            break;
        case 12:  //  store close time
            [timePicker setTag:12];
            [popoverController presentPopoverFromRect:tfShopCloses.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
            break;
    }

}

PopoverController 被定义为实例变量:

@property (nonatomic, strong) UIPopoverController *popoverController;

我已经标记了导致崩溃的行;我将所有 PopoverControllers 都更改为实例变量,问题似乎已解决,但现在已经抬起了它丑陋的脑袋。我还能做些什么来防止这种情况发生?

【问题讨论】:

    标签: ios objective-c uipopovercontroller


    【解决方案1】:

    检查 popoverController 在 showModalTime 方法中是否可见,因为 popoverController 覆盖

      if ([popoverController isPopoverVisible]) {
                [popoverController dismissPopoverAnimated:YES];
            }
    

    【讨论】:

    • 我加了;无法重新创建崩溃,但看起来您解决了问题。谢谢。
    【解决方案2】:

    你合成了属性吗?如果没有,您现在可能有一个 popoverController 和一个 _popoverController 变量...

    尝试将所有对popoverController 的引用更改为self.popoverController...

    self.popoverController = [[UIPopoverController alloc] initWithContentViewController:popoverContent];
    self.popoverController.delegate = (id)self;
    [self.popoverController setPopoverContentSize:CGSizeMake(200, 216) animated:NO];
    

    【讨论】:

      【解决方案3】:

      原因可能是这样的:PopoverController 找不到委托

      解决方案:确保您已经在 viewController 的 .h 文件中声明了 popover 的委托,例如..

      @interface FooController : UIViewController <UIPopoverControllerDelegate> {
          // ...
      }
      // ...
      @end
      

      然后在.m文件中实现委托方法,如..

      - (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {
          // do something now that it's been dismissed
      }
      

      更改委托的分配行,如..

      [popoverController setDelegate:self];
      

      试试这个..

      这可能对你有帮助......

      【讨论】:

      • 不,已在 .h 文件中分配了代理...这是在构建弹出框时发生的(如代码所示)
      • 尝试从委托的分配中删除 (id) 的转换,如编辑中所示...
      猜你喜欢
      • 1970-01-01
      • 2014-09-24
      • 1970-01-01
      • 1970-01-01
      • 2014-10-03
      • 2014-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多