Ios Uibutton动作在ARC模式下不触发,因为它们在非ARC模式下触发

Ios Uibutton动作在ARC模式下不触发,因为它们在非ARC模式下触发,ios,uibutton,loadnibnamed,Ios,Uibutton,Loadnibnamed,视图控制器.m @interface ViewController () { CustomView *view; } @implementation ViewController -(void)viewDidLoad { [super viewDidLoad]; view = nil; view = [[CustomView alloc]init]; [self.view addSubview:view]; } 在CustomView.m中 -(

视图控制器.m

@interface ViewController ()
{
    CustomView *view;
}

@implementation ViewController

-(void)viewDidLoad {
    [super viewDidLoad];

    view = nil;
    view = [[CustomView alloc]init];

    [self.view addSubview:view];
}
在CustomView.m中

-(CustomView *)init
{
    CustomView *result = nil;
    result = [[[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:self options:nil] objectAtIndex:0];

    return result;
}
我的自定义视图中有两个按钮。 我的自定义视图按预期加载良好,但如果为CustomView.m文件启用ARC,则不会触发按钮操作,如果禁用ARC,则会触发按钮操作

我错在哪里

这是加载uiview的nib的正确方法吗(我想在我的项目中的许多地方使用它…)


谢谢..

这是一个非常混乱的
init
方法实现

- (CustomView *)init
{
    CustomView *result = nil;
    result = [[[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:self options:nil] objectAtIndex:0];

    return result;
}
我建议把它改成这样

// class method not instance method
+ (CustomView *)loadFromNib {
    return [[[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:self options:nil] objectAtIndex:0];
}
@interface ViewController ()

@property (nonatomic, strong) CustomView *customView; // don't call it view, it's confusing

@end

@implementation ViewController

-(void)viewDidLoad {
    [super viewDidLoad];

    self.customView = [CustomView loadFromNib];

    [self.view addSubview:self.customView];
}
然后将您的
ViewController
方法更改为如下内容

// class method not instance method
+ (CustomView *)loadFromNib {
    return [[[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:self options:nil] objectAtIndex:0];
}
@interface ViewController ()

@property (nonatomic, strong) CustomView *customView; // don't call it view, it's confusing

@end

@implementation ViewController

-(void)viewDidLoad {
    [super viewDidLoad];

    self.customView = [CustomView loadFromNib];

    [self.view addSubview:self.customView];
}
您遇到的问题可能来自您将init方法实现为实例方法,但随后忽略该实例并返回新实例的方式


该类的内存含义令人困惑,很难解决。

我在加载nib时遇到异常,该类不符合密钥“btnLoc”的键值编码。这里btnLoc是我的一个按钮name@sivakrishna从哪里来?哪个班级在做这个?你想在哪里设置btnLoc?听起来您可能没有在nib中将视图的子类设置为
CustomView
。很难说没有看到该类中的任何代码。我将自定义视图的文件所有者设置为“CustomView”,而不是自定义视图View@sivakrishna是的,不要那样做。只需从nib中选择视图并设置视图的子类(而不是文件所有者)。您需要将视图中的插座连接到视图,而不是文件所有者。您能澄清一下它们之间的区别吗?