Сначала немного фона.Я новичок в разработке для iOS, я давно нахожусь в .Net land, и, возможно, поэтому я даже задаю этот вопрос, но здесь все идет.
Базовая настройка такова.У вас есть 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 кажется, чтотеперь это делается с помощью раскадровки и сегментов.В XCode вы настраиваете переход от MasterViewController к DetailsViewController, а затем в коде вы делаете что-то вроде этого:
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
[segue.destinationViewController setSomeDataProp:[self getSomeDataSomeHow]];
}
Мой вопрос в основном таков: старый подход почему-то кажется мне чище.Вы очень четко говорите о типе ViewController
, который вы добавляете в стек навигации, и вы можете легко устанавливать свойства для него.Однако в новом подходе destinationViewController
относится к типу id
(по понятным причинам), и мне он кажется намного менее чистым.Опять же, это может быть моя сторона .Net выходит, но это часто встречается в iOS?Просто использовать идентификатор и бросить осторожность на ветер?