选择项目时UIActionSheet崩溃

时间:2014-05-05 14:27:37

标签: ios objective-c uiactionsheet

我有UIView我以编程方式添加到UIViewController。此视图包含一些按钮,其中一个按钮打开UIActionSheet

当我点击任意一个UIActionSheet选项时,应用程序会在调用委托之前立即崩溃。

我认为这是一个记忆问题,但我想我已经涵盖了所有角落。

  • 自定义UIView是父视图控制器上的强属性。
  • 操作表正在从父视图控制器的标签栏中显示。
  • 操作工作表委托是UIView,委托方法已正确实施。

错误是EXC_BAD_ACCESS。 ([ContactOptionView actionSheet:clickedButtonAtIndex:]:发送到解除分配实例的消息)

任何帮助,非常感谢。

使用此代码创建操作表,其中CDField对象是核心数据NSManagedObject:

UIActionSheet *sheet = [[UIActionSheet alloc] init];
sheet.title = title;
for (CDField *field in fields) {
    [sheet addButtonWithTitle:field.value];
}
sheet.cancelButtonIndex = [sheet addButtonWithTitle:@"Cancel"];
sheet.delegate = self;
[sheet showFromTabBar:self.parentViewController.tabBarController.tabBar];

2 个答案:

答案 0 :(得分:0)

将ActionSheet声明为强类属性而不是本地声明可能会因为延长其生存时间而解决此问题。

@interface MyTableViewController ()

@property (strong, nonatomic) UIActionSheet *actionSheet;

@end    
@implementation MyViewController
@synthesize actionSheet = _actionSheet;
- (UIActionSheet *)actionSheet {
    if (!_actionSheet) {
        _actionSheet = [[UIActionSheet alloc] initWithTitle:@"title 
                                                   delegate:self
                                          cancelButtonTitle:@"Cancel"
                                     destructiveButtonTitle:nil 
                                          otherButtonTitles:@"do something", nil), nil];
    }
    return _actionSheet;
}

HTH, 彼得

答案 1 :(得分:0)

我在@Larme的帮助下解决了我的问题。我正在添加到我的视图控制器中的UIView是在长按手势上创建的,当长按手势结束时,视图正在被取消分配。当显示操作表时,用户必须将他们的手指从屏幕上移开以点击所选择的选项,此时此操作表的委托(视图)正在被释放。