Метод initWithNibName в раскадровке

Я следую учебнику Facebook для публикации на стене пользователя: http://developers.facebook.com/docs/howtos/publish-to-feed-ios-sdk/ и хотя он сделан с проектом .xib, я смог сделать все, что в моих силах, до сих пор. Тем не менее, я дошел до того, что мне нужно поместить некоторый код в метод initWithNibName: bundle:, но я не могу этого сделать, потому что я использую раскадровку. И, поскольку трудно сказать, когда именно будет вызван метод, я не могу просто написать метод с именем initWithNibName: bundle: и вызвать его из другого метода. Если кто-нибудь знает, как решить мою проблему, скажите об этом. Спасибо.

Ответ 1

Я сам столкнулся с этой проблемой. Похоже, что раскадровки не используют initWithNibName:bundle:, но либо initWithCoder:(NSCoder *)aDecoder, либо initWithStyle:(UITableViewStyle)style.

Стандартные реализации двух методов выглядят следующим образом:

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        // Custom initialization
    }
    return self;
}

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

Мне еще нужно использовать версию initWithStyle, но я бы предположил, что он вызвал UITableViewController. Если вы сомневаетесь, вы можете просто добавить оба метода в файл вместе с вызовом NSLog(), который печатает имя метода (или любую другую уникальную строку). Затем вы можете запустить его в симуляторе, чтобы увидеть, что вызвано, и удалить другое.

Я настоятельно рекомендую не вызывать initWithNibName:bundle: себя из любого другого метода init. Лучше просто переместить код в правильный метод.