Сначала немного предыстории. Я новичок в разработке 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 и бросить осторожность на ветер?