按动作按钮两次会崩溃应用程序

时间:2013-01-22 14:55:43

标签: objective-c xcode

当我按下操作按钮后再次按下操作按钮打开我的活动视图时,我的应用程序在iPad模拟器中崩溃了。我担心如果用户想要再次按下按钮关闭Popover而不是触摸它之外,这将是一个问题。任何建议表示赞赏:)

仅供参考,操作按钮是UIToolbar按钮。

在.h

@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]; }}

2 个答案:

答案 0 :(得分:1)

检查您是否已有弹出窗口,并执行其他操作

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

答案 1 :(得分:0)

问题是,视图控制器只能在任何给定时间呈现另一个视图控制器。目前,当您再次点击该按钮时,您尝试呈现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.
}