Objective c 按两次操作按钮会使应用程序崩溃

Objective c 按两次操作按钮会使应用程序崩溃,objective-c,xcode,Objective C,Xcode,当我再次按下动作按钮打开活动视图时,我的应用程序在iPad模拟器中崩溃。我担心如果用户想再次按下按钮关闭Popover而不是触摸它的外部,这将是一个问题。如有任何建议,我们将不胜感激:) 仅供参考,操作按钮是一个UIToolbar按钮 在 @property (strong, nonatomic) UIPopoverController *popup; @property (strong, nonatomic) UIPopoverController *activityViewProp; 在.

当我再次按下动作按钮打开活动视图时,我的应用程序在iPad模拟器中崩溃。我担心如果用户想再次按下按钮关闭Popover而不是触摸它的外部,这将是一个问题。如有任何建议,我们将不胜感激:)

仅供参考,操作按钮是一个UIToolbar按钮

@property (strong, nonatomic) UIPopoverController *popup;
@property (strong, nonatomic) UIPopoverController *activityViewProp;
在.m中:

-(IBAction)openUIActivityView:(id)sender {



    UIActivityViewController *activityView = [[UIActivityViewController alloc]initWithActivityItems:@"Hello World" applicationActivities:nil];


    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
        [self presentViewController:activityView animated:YES completion:^{    
        }];
    } else {

self.popup = [[UIPopoverController alloc] initWithContentViewController:activityView];

[self.popup presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES]; }}

只需检查是否已经有弹出窗口,然后执行其他操作

-(IBAction)openUIActivityView:(id)sender {
    if (self.popup) {
        [self.popup dismiss ...];
    }
    else {
        // show popup code
    }
 }

问题是,视图控制器在任何给定时间只能显示另一个视图控制器。当前,当您第二次点击该按钮时,您尝试呈现UIActivityViewController的新实例,而另一个实例已经呈现

您可以通过检查主视图控制器的
presentedViewController
属性的值来修复此问题。如果它不是nil(实际上是UIActivityViewController类型),则可以从操作返回,而不执行任何操作:

- (IBAction)openUIActivityView:(id)sender {
    if (!self.presentedViewController) {
        // We have no presented view controller yet.
        // <your current code here>
    } else {
        // We are already presenting a view controller.
        // Either dismiss it, or don't do anything.
}
-(iAction)openUIActivityView:(id)发件人{
如果(!self.presentedViewController){
//我们还没有显示视图控制器。
// 
}否则{
//我们已经介绍了一个视图控制器。
//要么驳回它,要么什么都不做。
}

谢谢-我还需要添加self.popup=nil,否则它将在关闭后无法重新打开。谢谢您的帮助:)