应用程序因桌面视图控制器初始化而崩溃

时间:2016-03-24 11:10:27

标签: ios objective-c swift

我初始化tableView的代码是:

convenience override init(style: UITableViewStyle) {
    self.init(style: .Grouped)
    // Custom initialization
    self.title = NSLocalizedString("mdm.agent.common.desktopCentral", comment : "")
}

错误是行上的EXC_BAD_ACCESS

 self.init(style: .Grouped)

为什么这种类型的初始化会引发错误,但是与目标c一起使用?目标c代码是:

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:UITableViewStyleGrouped];
if (self) {
    // Custom initialization

    self.title = NSLocalizedString(@"mdm.agent.common.desktopCentral", nil);
}
return self;

}

1 个答案:

答案 0 :(得分:0)

您需要在构造函数中调用superclasses init方法,或者在您自己的类中调用指定的初始化程序。

在您发布的示例Objective-C代码中有行

self = [super initWithStyle:UITableViewStyleGrouped];

这一行正在调用initWithStyle:的超类实现。

在您的代码中,您从同一方法中调用self.init(style: .Grouped),这会导致无限递归。您可以通过两种不同的方式修复此问题,或者调用不同的指定初始值设定项,例如self.init(),或者删除convenience关键字以使其成为指定的初始值设定项,这将允许您调用超类实现。

你可能想要做第二个选项,如下所示:

override init(style tableStyle: UITableViewStyle) {
    super.init(style: style) //use the style value passed into the method
    // Custom initialization
    self.title = NSLocalizedString("mdm.agent.common.desktopCentral", comment : "")
}
相关问题