Передача данных из одного контроллера представления в другой; iOS <=4 против iOS 5

Сначала немного предыстории. Я новичок в разработке iOS, я долгое время был в стране .Net, и, вероятно, поэтому я даже задаю этот вопрос, но вот так.

Основная схема такова. У вас есть UINavigationController с RootViewController, который мы назовем MasterViewController. Когда на этом MasterViewController происходит какое-то действие, мы хотим выполнить сверление в DetailsViewController. Однако мы также хотим передать некоторые данные в DetailsViewController.

Насколько я понимаю, в предыдущих версиях SDK (до iOS 5) подход был примерно таким:

@implementation MasterViewController

    -(IBAction)someAction
    {
       DetailsViewController *dvc = [[DetailsViewController alloc]initWithNibName:@"DetailsView" bundle:nil];
       dvc.someDataProp = [self getSomeDataSomeHow];
       [[self navigationController] pushViewController:dvc animated:YES];
    }

@end

Однако теперь, в iOS 5, похоже, это делается с помощью Storyboard и сегментов. В XCode вы устанавливаете segue от MasterViewController к DetailsViewController, а затем в коде вы делаете что-то вроде этого:

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
   [segue.destinationViewController setSomeDataProp:[self getSomeDataSomeHow]];
}

Мой вопрос заключается в следующем: Мне кажется, что более старый подход намного чище. Вы четко определяете тип ViewController, который вы передаете в навигационный стек, и вы можете легко устанавливать его свойства. В новом подходе, однако, destinationViewController имеет тип id (по очевидным причинам), и мне это кажется гораздо менее чистым. Опять же, это может быть моя сторона .Net, но часто ли такое встречается в iOS? Просто использовать id и бросить осторожность на ветер?

7
задан BFree 1 January 2012 в 16:36
поделиться