gpt4 book ai didi

ios - 我类的 UIButton 在 ViewController 中不起作用(EXC_BAD_ACCESS)

转载 作者:行者123 更新时间:2023-11-29 12:55:25 27 4
gpt4 key购买 nike

我用 UIView 创建了自己的类,包括 UIButton 及其方法:

MyClass.h

@property (strong, nonatomic) UIView* mainBack;
@property (strong, nonatomic) UIButton* sortButton;


MyClass.m

- (id) initFor: (int) object {

if (self = [super init]) {

_mainBack = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];

_sortButton = [UIButton buttonWithType:UIButtonTypeSystem];
_sortButton.frame = CGRectMake(10.0, 5.0, 60.0, 40.0);
[_sortButton addTarget:self action:@selector(ChangeSort) forControlEvents:UIControlEventTouchUpInside];
[_mainBack addSubview:_sortButton];
}
return self;
}

- (void) ChangeSort {
NSLog(@"change");
}

- (void) ShowBarOnView: (UIViewController*) view AtPoint: (CGPoint) point{
[_mainBack setFrame:CGRectMake(point.x, point.y, _mainBack.frame.size.width, _mainBack.frame.size.height)];
[view.view addSubview:_mainBack];
}

在 ViewController 中,我创建了 myClass 的实例并调用了显示 View 的方法

MyClass* mySort = [[myClass alloc] initFor: rooms];
[mySort ShowBarOnView:self AtPoint:CGPointMake(0, 50)];

所以,我得到了带有按钮的 View ,但是当按下时,应用程序崩溃并显示:EXC_BAD_ACCESS(代码=1,地址=0x0)

怎么了?

谢谢。

最佳答案

是的,我遇到了同样的问题!

我让我的 MainViewController 在一个方法中创建了 PlayingViewController,长话短说,这就是问题所在。

SOFMainVC.h
SOFMainVC.m
#import "SOFPlayingVC.h" ...

- (void)someMethodBeingCalled {
SOFPlayingVC *playingVC = [[SOFPlayingVC alloc] init];
[self.view addSubview:playingVC.view];
}

SOFPlayingVC.m
...
...
- (void)viewDidLoad {
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setFrame:CGRectMake(0, 0, 100, 50)];
[button addTarget:self
action:@selector(buttonAction:)
forControlEvents:UIControlEventTouchUpInside];
[self.view addSubView:button];
...
...
}

如果我们专注于仪器中的 SOFPlayingVC,我们会看到 Controller 在实例化完成后会立即被垃圾回收。但是,如果我们简单地将它添加到用作 @property(非原子,强) 的 Controller 中,我们将不会丢失它,直到它离开 SOFMainViewController

所以我们这里的问题的解决方案是:

#import "SOFPlayingVC.h"
SOFMainVC.h
...
@interface SOFMainVC : UIViewController
@property (nonatomic, strong) SOFPlayingVC *playingVC;
...
@end

SOFMainVC.m
#import "SOFPlayingVC.h" ... ...

- (void)someMethodBeingCalled {
SOFPlayingVC *playingViewController = [[SOFPlayingVC alloc] init];
[self.view addSubview:playingVC.view];
}

关于ios - 我类的 UIButton 在 ViewController 中不起作用(EXC_BAD_ACCESS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21271275/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com