まず、少し背景。私はiOS開発の初心者です。私は長い間、.Netの土地にいました。それはおそらく私がこの質問をしている理由でしょうが、ここにはあります。1つのビューコントローラから別のビューコントローラにデータを渡す。 iOS <= 4対iOS 5
基本設定はこれです。 UINavigationController
にはRootViewController
、MasterViewController
とします。このMasterViewControllerで何らかのアクションが発生すると、DetailsViewController
にドリルダウンします。ただし、一部のデータをDetailsViewController
に渡したいとします。さてしかし、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
を:
それはSDKの以前のバージョンで(前のiOS 5への)アプローチは、これに似たことが、私の理解でありますストーリーボードとセグを使ってXcodeで、あなたはDetailsViewControllerにMasterViewControllerからセグエを設定し、その後のコードで、あなたがこのような何かを:
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
[segue.destinationViewController setSomeDataProp:[self getSomeDataSomeHow]];
}
私の質問は基本的にはこれです:古いアプローチは、何らかの形で私にたくさんのきれいな感じ。 ViewController
のタイプについては非常に明確です。ナビゲーションスタックにプッシュしていて、プロパティを簡単に設定できます。しかし、新しいアプローチでは、destinationViewController
はタイプid
(明白な理由のため)であり、それは私にはるかに少ない清潔感を感じます。繰り返しますが、これは私の.Net側が出てくる可能性がありますが、iOSではこれが一般的ですか? idを使い、風に注意を払うだけです。
スニペットをコピー&ペーストするのではなく、これがどのように行われているかを尋ねることに対して多くの敬意を払います。私も同様の質問をしていましたが、ここでのいくつかの経験は私の答えです:iOS5では、UIロジックが2つに分かれていることがわかります。1)ViewControllerのライフサイクルと遷移2)データフロー。Storyboardは1を処理し、開発者は2を処理することが期待されます。このようなシナリオでは、これらのキャストが実行されます。私の場合、問題は、この分割が意味をなさないかどうかです。これらの2つの概念を切り離すことはできますか?私はアップルがそうしていると思うし、それがどのように機能するかを見るだろう。 – Guven