Welcome to the Treehouse Community

The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today.

iOS Build a Blog Reader iPhone App Exploring the Master-Detail Template Passing Data To The Detail View

Oliver Duncan
Oliver Duncan
16,641 Points

Why doesn't Amit need to cast [segue destinationViewController] as an instance of the DetailViewController class?

I noticed that in my (newer version of) xCode, the Master/Detail template prepareForSegue function calls the topViewController property of [segue destinationViewController], then casts this as an instance of the DetailViewController class. However, in this video, Amit just calls the setDetailItem method directly on the [segue destinationViewController]. Is this due to a new feature in xCode, or am I missing something?

Here's my function, then his:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"showDetail"]) {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        NSString *object = self.titlesArray[indexPath.row];
        DetailViewController *controller = (DetailViewController *)[[segue destinationViewController] topViewController];
        [controller setDetailItem:object];
    }
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"showDetail"]) {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        NSString *object = self.titlesArray[indexPath.row];
        [segue destinationViewController setDetailItem:object];
    }
}