代码之家  ›  专栏  ›  技术社区  ›  jps

将自己传递给Objective-C中的函数时出现的问题

  •  0
  • jps  · 技术社区  · 14 年前

    在写ipad应用程序时,我似乎遇到了很多奇怪的错误。基本上,我有一个父类“ticker”,它检查股票ticker数据是否缓存,如果没有缓存,它会创建一个networktickerdata实例,将自身作为参数传递,并将返回的数据添加到自身。

    这是密码 [Ticker getData] :

    -(void)getData
    {   
        // some check here to see if the data is locally cached
        // if not
        NetworkTickerData* tick = [[NetworkTickerData alloc] initWithTicker: self];
        [tick getHistoricalTickerData];
        self.tickerData = tick.tickerData;
    }
    

    以及代码 [NetworkTickerData initWithTicker:] :

    +(NetworkTickerData*)initWithTicker: (Ticker*)tick
    {
        NSLog(@"Doing Setup");
        NetworkTickerData* t = [[NetworkTickerData alloc] init];
        t.ticker = tick;
        t.net = [[NetworkOp alloc] init];
    
        return t;
    }
    

    我得到错误: *** -[NetworkTickerData initWithTicker:]: unrecognized selector sent to instance

    传递变量有问题吗 self initWithTicker ?为了它的价值, NSLog ,仅用于调试目的,从不打印输出。

    如果我不得不猜测的话,问题一定是使用 自己 ,可能不是指当前的类?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Alexsander Akers    14 年前

    这个 initWith... 方法是实例方法,而不是类方法。变化

    +(NetworkTickerData*)initWithTicker: (Ticker*)tick
    

    -(NetworkTickerData*)initWithTicker: (Ticker*)tick
    

    注意, + 更改为 - .

        2
  •  3
  •   imaginaryboy    14 年前

    你在定义 initWithTicker: 作为类方法而不是实例方法。

    在Op评论后编辑:

    类方法是对类对象(即[MyClassalloc])调用的方法。

    实例方法是对已分配的类实例调用的方法。

    区别与是否返回新对象无关。也, init 方法不返回新对象,它们初始化刚刚通过 alloc ,然后返回同一对象( self )

    推荐文章