覆盖iOS中的默认init函数

时间:2012-08-20 21:09:23

标签: ios

最初,我有一个默认的初始化函数

 -(id) init
   {
    if (self=[super init])
    {
      ......
     }
    return self;
   }

但是,我喜欢覆盖init函数以传入自定义对象或其他对象   像

 -(id) initWithScore:(NSString*) score
    {
    if (self=[super init])

现在有一个错误,说[super init]函数只能用 - (id)init函数调用。

那么我该怎么做才能修复它所以我可以传入对象并使用self = [super init]?

错误:无法在init系列中的方法之外分配给自己。

2 个答案:

答案 0 :(得分:23)

我试图将一个项目转换为ARC,并在创建一个新项目并包含旧文件后 - 我得到的一个问题是

  

无法在init系列中的方法之外分配给“self”

选择器名称必须以init开头 - 不仅在我的情况下,init选择器是:

-(id)initwithPage:(unsigned)pageNum {...}

注意小'w'。

我已将其更改为:

-(id)initWithPage:(unsigned)pageNum {...}

注意首都'W'!

我的问题已经解决了。

我希望这有助于某人。

答案 1 :(得分:1)

您需要在新方法中返回id类型的对象。

假设您已声明了NSString * myscore属性,您将编写如下内容:

-(id) initWithScore:(NSString*) score
 {
    self=[super init];
    if (self)
    {
       self.myscore = score;
    }
    return self;
}