Во-первых, немного фона. Я новичок в разработке iOS, я давно нахожусь в сети .Net, и, наверное, поэтому я даже задаю этот вопрос, но здесь.Передача данных с одного контроллера вида на другой; iOS <= 4 против iOS 5
Основная настройка - это. У вас есть UINavigationController
с RootViewController
, мы позвоним MasterViewController
. Когда на этом MasterViewController происходят какие-то действия, мы хотим просверлить DetailsViewController
. Однако мы также хотим передать некоторые данные в DetailsViewController
.
Это мое понимание, что в предыдущих версиях SDK (до прошивки 5) подход был похож на это:
@implementation MasterViewController
-(IBAction)someAction
{
DetailsViewController *dvc = [[DetailsViewController alloc]initWithNibName:@"DetailsView" bundle:nil];
dvc.someDataProp = [self getSomeDataSomeHow];
[[self navigationController] pushViewController:dvc animated:YES];
}
@end
Теперь, однако, в прошивке 5, кажется, что теперь это делается используя раскадровку и сеги. В XCode настройке SEGUE от MasterViewController к DetailsViewController, а затем в коде вы делаете что-то вроде этого:
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
[segue.destinationViewController setSomeDataProp:[self getSomeDataSomeHow]];
}
Мой вопрос заключается в основном это: Старшее подход как-то чувствует себя намного чище меня. Вы очень четко указываете тип ViewController
, который вы нажимаете на стек навигации, и вы можете легко установить на него свойства. В новом подходе, однако, destinationViewController
имеет тип id
(по понятным причинам), и он просто чувствует себя намного менее чистым для меня. Опять же, это может быть моя .Net сторона выходит, но это распространено в iOS? Просто используйте id и будьте осторожны с ветром?
Большое уважение к вопросу о том, как это делается, а не просто копировать и вставлять фрагменты. У меня также были схожие вопросы, и с некоторым опытом здесь есть мой ответ: с iOS5 я вижу, что логика пользовательского интерфейса была разделена на две части: 1) жизненный цикл ViewController и переходы 2) поток данных.Раскадровка заботится о 1, и разработчики, как ожидается, позаботятся о них. В таком сценарии эти броски будут происходить. Для меня вопрос в том, имеет ли этот раскол смысл? Могут ли эти две концепции быть развязаны? Я думаю, что Apple идет именно так, и мы увидим, как это работает. – Guven