Проблемы при передаче себя функции в Objective-C - PullRequest
0 голосов
/ 26 сентября 2010

При написании приложения для iPad я, похоже, сталкиваюсь с множеством странных ошибок. По сути, у меня есть родительский класс «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, только там для целей отладки, никогда не печатает.

Если бы мне пришлось угадывать, проблема должна быть в использовании self, может быть, это не относится к текущему классу?

Ответы [ 2 ]

3 голосов
/ 26 сентября 2010

Методы initWith... являются методами экземпляра, а не методами класса. Изменение

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

до

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

Обратите внимание, что + меняется на -.

3 голосов
/ 26 сентября 2010

Вы определяете initWithTicker: как метод класса, а не метод экземпляра, как должно быть.

РЕДАКТИРОВАТЬ после комментария ОП:

Метод класса - это метод, который вызывается для объекта класса (т. Е. [MyClass alloc]).

Метод экземпляра - это метод, который вызывается для уже выделенного экземпляра класса.

Различие не имеет ничего общего с тем, возвращается ли новый объект. Кроме того, init методы не возвращают новый объект, они инициализируют тот, который был только что выделен через alloc, а затем возвращают тот же объект (self).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...