在子视图中按下按钮时应用程序崩溃
Posted
技术标签:
【中文标题】在子视图中按下按钮时应用程序崩溃【英文标题】:App crash when pressing a button in a subview 【发布时间】:2014-05-12 09:31:24 【问题描述】:scrollView
有一个大问题。我有这段代码,当我按下“registerView”的xib
文件中的按钮时,应用程序崩溃:
MainViewController.m:
ViewDidLoad:
UIScrollView* scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
scrollView.backgroundColor = [UIColor whiteColor];
scrollView.scrollEnabled = YES;
scrollView.pagingEnabled = NO;
scrollView.showsVerticalScrollIndicator = YES;
scrollView.showsHorizontalScrollIndicator = YES;
scrollView.contentSize = CGSizeMake(768, 1900);
[self.view addSubview:scrollView];
RegisterViewController *registerView = [[RegisterViewController alloc] init];
[scrollView addSubview:registerView.view];
“RegisterView”被添加到scrollView
,但是当我在“registerView”中按下按钮时,应用程序崩溃并显示此日志:
2014-05-12 11:18:04.599 RegisterForm[16505:60b] -[UIScrollView modalPresentationStyle]: unrecognized selector sent to instance 0x13f517200
2014-05-12 11:18:04.602 RegisterForm[16505:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIScrollView modalPresentationStyle]: unrecognized selector sent to instance 0x13f517200'
*** First throw call stack:
(0x18a83709c 0x196c8dd78 0x18a83bd14 0x18a839a7c 0x18a7594ac 0x18d800a68 0x1000e76b4 0x18d70c2c0 0x18d70c044 0x18d7137dc 0x18d710ab0 0x18d78488c 0x1000e674c 0x18d7815cc 0x18d780fb8 0x18d77a9a0 0x18d70d530 0x18d70c720 0x18d77a0b0 0x190119128 0x190118c54 0x18a7f6fc8 0x18a7f6f28 0x18a7f514c 0x18a735b38 0x18d7792d4 0x18d7740e8 0x1000e7cd0 0x197277aa0)
libc++abi.dylib: terminating with uncaught exception of type NSException
按钮: RegisterViewController.h:
- (IBAction)btn_reset:(id)sender;
RegisterViewController.m:
- (IBAction)btn_reset:(id)sender
我尝试在scrollView
中放置一个按钮,但后来我无法访问“文本字段”信息,所以我需要在“RegisterView”中放置一个按钮。
【问题讨论】:
请提供按钮的操作代码 按钮中没有代码,这就是为什么这很奇怪,每次我添加按钮时,编译并按下它都会崩溃。 声明 RegisterViewController *registerView in 所以你的按钮没有 onTouchUpInside 事件处理程序,但按下它会导致崩溃???? O_o 您是否有链接到按钮的模态序列? 【参考方案1】:在@interface 中声明RegisterViewController *registerView 或为其创建@property。
@interface XXXXX ()
RegisterView *registerView;
或
@property (nonatomic, strong) RegisterView *registerView;
【讨论】:
【参考方案2】:在您的情况下,MainViewController
没有保留 registerView
对象。要保留实例,您需要将其添加为MainViewController
的childViewController
,
RegisterViewController *registerView = [[RegisterViewController alloc] init];
[self addChildViewController:registerView];
[scrollView addSubview:registerView.view];
无需为此声明任何其他属性,UIViewController
将保留其所有 childViewControllers
。
【讨论】:
【参考方案3】:我猜这与不保留“RegisterView”类有关。当您将其视图添加到 scrollView 时,一旦到达函数的末尾,该类本身就会被释放。
尝试将 RegisterView 类声明为属性,如下所示:
@property (nonatomic, strong) RegisterView *registerView;
并将其添加到滚动视图中:
self.registerView = [[RegisterViewController alloc] init];
[scrollView addSubview:self.registerView.view];
【讨论】:
以上是关于在子视图中按下按钮时应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章
在swift3中按下按钮时如何以编程方式执行segue或呈现视图