指定的初始化程序只应在“超级”上调用指定的初始值设定项。 xcode 6.3.1

时间:2015-05-17 07:26:42

标签: objective-c xcode

使用xcode 6.3.1并为IOS 8.3设备构建项目。获取指定的初始化程序应仅在“超级”上调用指定的初始化程序。错误,请有人请调整代码。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    if (!nibNameOrNil) {
        return [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    }
    NSLog (@"%@ is now deprecated, we are moving away from nibs.", NSStringFromSelector(_cmd));
    return [self initWithStyle:UITableViewStyleGrouped];
}

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        [self initWithStyle:UITableViewStyleGrouped];
    }
    return self;
}

1 个答案:

答案 0 :(得分:1)

这个错误在这里说明了一切。不要在' self'上调用其中一个init方法。来自其中一个init方法。你在调用:

>>> words = s.lower().split()
>>> words
['yes!', 'these', 'are', 'words.']
>>> words.sort()
>>> words
['are', 'these', 'words.', 'yes!']
>>>

你应该调用:

[self initWithStyle:UITableViewStyleGrouped];

或者如果你在“自我”中有一些额外的逻辑。对于这个init,你应该重新设计你的公共初始化逻辑调用栈。

底线:不要从init调用[self init ...],只调用[super init ...]或添加其他自定义(未覆盖)的init方法。

此外:你正在调用init两次。