Преобразование строки кода для совместимости с раскадровками в XCode 4.2 - PullRequest
0 голосов
/ 29 февраля 2012

У меня есть rss-анализатор, который я конвертирую в формат раскадровки, и я столкнулся с проблемой. Когда пользователь касается раздела табличного представления, в котором есть RSS-канал, он передает представление в контроллер подробного представления со следующим кодом:

- (id)initWithItem:(NSDictionary *)theItem {
if (self == [super initWithNibName:@"RssDetailController" bundle:nil]) {
    self.item = theItem;
    self.title = [item objectForKey:@"title"];
}

return self;
}

Когда я запускаю его, он работает нормально, но вылетает, когда я пытаюсь увидеть историю. Очевидно, это потому, что у меня больше нет перьев из-за использования раскадровок, но как бы я изменил код для работы?

Извините, если моя формулировка неверна. Если у вас есть какие-либо вопросы или вам нужны разъяснения, я отвечу тогда в комментариях

1 Ответ

1 голос
/ 29 февраля 2012

Вместо того, чтобы пытаться установить значения свойств с помощью пользовательского метода init вашего контроллера подробного представления, лучший способ справиться с этим в парадигме раскадровки - сделать это с помощью метода prepareForSegue: вашего контроллера табличного представления.

Если вы настроили переход в раскадровке от контроллера табличного представления к контроллеру подробного представления, этот метод будет вызываться при переходе.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{           
    if ([segue.identifier isEqualToString:@"ShowDetail"]) {  // be sure to name your segue in storyboard

        // sender in this case is the tableview cell that was selected
        UITableViewCell *cell = sender;

        // get the index path for the selected cell
        NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];

        // use the indexPath to get the appropriate item from your data source
        NSDictionary *theItem = [self.dataArray objectAtIndex:[indexPath row]];  // or whatever

        // get the view controller you are about to segue to
        RssDetailController *rssDetailvc = [segue destinationViewController];

        // set the properties
        rssDetailvc.item = theItem;
        rssDetailvc.title = [theItem objectForKey:@"title"];
    }
}
...