Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

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

Oliver Duncan
Oliver Duncan
16,642 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];
    }
}