Ios UIPopoverController不解散

Ios UIPopoverController不解散,ios,uipopovercontroller,Ios,Uipopovercontroller,在我的应用程序中,我有以下层次结构: AppViewController(根)-->HUDViewController(作为AVC中的容器viewcontroller)-->NavBar(UIView的子视图)-->UIButtons 当你触摸一些按钮时,他们需要从AVC启动UIPOPCovercontroller。我将通知从NavBar类发送回AVC。在通知中心的选择器中,我有以下代码 ... //get the client list from the notification

在我的应用程序中,我有以下层次结构:

AppViewController(根)-->HUDViewController(作为AVC中的容器viewcontroller)-->NavBar(UIView的子视图)-->UIButtons

当你触摸一些按钮时,他们需要从AVC启动UIPOPCovercontroller。我将通知从NavBar类发送回AVC。在通知中心的选择器中,我有以下代码

 ...
 //get the client list from the notification
            [dictPopoverData setObject: [[notification userInfo] objectForKey:@"Client List"] forKey:@"Client List"];

            //get the frame of the object launching the popover
            popupCallerFrame = CGRectFromString([[notification userInfo] objectForKey:@"Caller Frame"]);

            [self presentPopOver:CLIENT_LIST:YES:dictPopoverData];
...
那么在现在的流行音乐中我有这样一个:

- (void) presentPopOver : (int) popoverID : (BOOL) isTable : (NSMutableDictionary*) dictPopoverData {

    if (self.myPopoverController != nil) {
        [self.myPopoverController dismissPopoverAnimated:YES];
        self.myPopoverController = nil;
    }

    CGRect launchFrame;

    //init the popover
    if (popoverID == CLIENT_LIST) {

        ClientListPopover* vcClientList = [[ClientListPopover alloc] initWithStyle:UITableViewStylePlain];
        vcClientList.arrDataSource = [dictPopoverData objectForKey:@"Client List"];
        self.myPopoverViewController = vcClientList;

        //set the launch frame
        launchFrame = popupCallerFrame;
        launchFrame.origin.x = launchFrame.origin.x;
        launchFrame.origin.y = launchFrame.origin.y + 100.0;


    } else if (popoverID == PA_LIST) {

        PAListPopover* vcPAList = [[PAListPopover alloc] initWithStyle:UITableViewStylePlain];
        vcPAList.strClientNumber = [dictPopoverData objectForKey:@"Client Number"];
        self.myPopoverViewController = vcPAList;

        //set the launch frame
        launchFrame = popupCallerFrame;
        launchFrame.origin.x = launchFrame.origin.x;
        launchFrame.origin.y = launchFrame.origin.y + 100.0;
    }


    //init and display the popover controller
    if (self.myPopoverController == nil) {

        //add the self.myPopoverViewController
        self.myPopoverController = [[UIPopoverController alloc] initWithContentViewController:self.myPopoverViewController];

        //display the popover
        [self.myPopoverController presentPopoverFromRect:launchFrame inView:self.view
          permittedArrowDirections:UIPopoverArrowDirectionUp
                          animated:YES];
        [self.myPopoverController setDelegate:self];

    } else {

        [self.myPopoverController dismissPopoverAnimated:YES];
        self.myPopoverController = nil;
    }



}
假设用户点击客户端按钮,通知被发送到AVC,弹出控制器中的一个UITable。然后,用户从表中选择一个客户机。再次向AVC发送通知,此时显示的客户端列表弹出框应被取消,PA列表弹出框应显示。似乎没有调用[self.myPopoverController dismissPopoverAnimated:YES]。我跟踪了它,它点击了那行代码,但什么也没发生,第一个弹出框仍然在屏幕上。你知道我做错了什么吗

编辑:我忘了提到我似乎无法将委托分配给self.myPopoverController。这可能就是为什么Disclease方法没有触发的原因


编辑:我在popover控制器初始化后添加了对委托的调用。这似乎没有什么不同。如果我在第一个popover的外面触摸,而不在里面触摸,它确实会消失,我可以跟踪该方法

那么,如果你点击按钮,是否不带你到else条件?或者,它会将您带到else条件,但dismissPopoverAnimated不会解除popOver,请在[self.myPopoverController dismissPopoverAnimated:YES]处放置断点;然后在控制台中打印po self.myPopoverController.delegate并检查该委托是否为零:dismissPopoverAnimated不是dismissing-如果我记录popover控制器委托,它就在那里-我跟踪了它,在第二次调用时它挂在displayPopoverFromRect调用上。该死。该错误与popover控制器无关…我在第二个视图控制器中输入了一个错误,导致了一个无休止的循环…如果你回来放-试着不要愚蠢作为答案,我会选择它:你知道我以前遇到过什么吗