【问题标题】:UIActionSheet crashes after appearing again on iPadUIActionSheet 在 iPad 上再次出现后崩溃
【发布时间】:2011-07-02 16:47:28
【问题描述】:

UIActionSheet 在第二次出现后崩溃..

.H 文件

..UIActionSheetDelegate>{

 UIActionSheet *popupQuery;
}
@property (nonatomic, retain) UIActionSheet *popupQuery;

.M 文件

-(IBAction)showActionSheet:(id)sender {

if (popupQuery.visible) {
    NSLog(@"popupQuery isVisible");

    [popupQuery dismissWithClickedButtonIndex:-1 animated:YES];

    return;
}else{


popupQuery = [[UIActionSheet alloc] initWithTitle:@"Title" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Readibility" otherButtonTitles:@"Email URL", @"Print", nil];
popupQuery.actionSheetStyle = UIActionSheetStyleBlackOpaque;
//[popupQuery showInView:self.view];


[popupQuery showFromBarButtonItem:actionButton animated:YES];

[popupQuery release];
}
  }

【问题讨论】:

    标签: ipad crash uiactionsheet


    【解决方案1】:

    当您在从actionButton 显示popupQuery 后释放它时,您放弃了对该对象的所有权。如果对象被解除分配,那么popupQuery 将指向一个解除分配的对象,当您执行popupQuery.visible 时可能会导致崩溃。既然你有它作为一个属性,你可以这样做——

    self.popupQuery = [[[UIActionSheet alloc] initWithTitle:@"Title" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Readibility" otherButtonTitles:@"Email URL", @"Print", nil] autorelease];
    

    删除末尾的release 语句。现在,当您popupQuery.visible 或self.poupQuery.visible 时,该对象将有效。在这种情况下,您将拥有所有权,您可以安全地访问该对象。

    【讨论】:

    • 非常感谢。那个自动释放技巧真的很有帮助。我担心每次按下操作按钮时我都会继续分配弹出窗口。
    【解决方案2】:

    从documentation 到UIActionSheet:

    - (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated
    

    参数

    按钮索引

    被点击的按钮的索引。按钮索引从 0 开始。

    因此问题可能出在您的-1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-12
      • 2012-11-26
      • 2011-04-29
      • 1970-01-01
      相关资源
      最近更新 更多