0

我正在研究 SO,并认为我已经知道如何做到这一点,但我的测试失败了。我试图从它启动/包含的视图控制器中关闭一个弹出控制器(我对 poc 和 vc 的关系仍然有点模糊)。

在我的 viewcontroller .h 我有这个:

@interface OAI_vcOperatingRooms : UIViewController {

    OAI_ColorManager* colorManager;
    OAI_FileManager* fileManager;

    UIPopoverController* myPopOverController;

}

@property (nonatomic, weak) UIPopoverController* myPopOverController;

- (void) closeVC : (id) sender;

并在 .m 文件中

UIButton* btnClose = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [btnClose addTarget:self 
               action:@selector(closeVC:)
     forControlEvents:UIControlEventTouchDown];
    [btnClose setTitle:@"Close" forState:UIControlStateNormal];
    btnClose.frame = CGRectMake(10.0, 210.0, 160.0, 40.0);

    [self.view addSubview:btnClose];

- (void) closeVC : (id) sender {

    [myPopOverController dismissPopoverAnimated:YES];
}

在调用popovercontroller的uiview中,我引用了viewcontroller并添加了这个:

//operating rooms
        controller2 = [[OAI_vcOperatingRooms alloc] initWithNibName:@"OAI_vcOperatingRooms" bundle:nil];
        popoverController2 = [[UIPopoverController alloc] initWithContentViewController:controller2];

        controller2.myPopOverController = popoverController2; 

没有错误,但当我点击关闭按钮时没有任何反应。是否可以从 VC 中引用 POC?

谢谢

4

1 回答 1

1

我相信 ott 的评论是针对某事的 - 尝试使用strong属性而不是属性weak。属性很可能在最后一次weak使用后立即被 ARC 设置为 nil。除非您将其设置为 early,否则属性将在其父对象(在本例中为您的子类)的生命strong周期内一直存在。UIViewControllernil

注意:您可能不需要UIPopoverController *myPopOverController;在您的界面中,因为 Xcode 会自动生成_myPopOverController作为支持变量。

于 2012-11-26T22:28:18.910 回答