我有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];
答案 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是在长按手势上创建的,当长按手势结束时,视图正在被取消分配。当显示操作表时,用户必须将他们的手指从屏幕上移开以点击所选择的选项,此时此操作表的委托(视图)正在被释放。