2012-10-31 10 views
9

私はiOS4をサポートする必要があったため、xibファイルですべてを開発しました。ストーリーボードはあなたに醜いコードを書くことを余儀なくされていますか?

今、私たちは最終的にだけiOS5をとiOS6をサポートしているので、私は絵コンテを試してみることにしましたので、すべてが正常と簡単ですが、私は自分自身がこのようなコードをたくさんやって見つけた:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

    if ([segue.identifier isEqualToString:@"AddPlayer"]) { //Ugly 

     UINavigationController * navigationController = segue.destinationViewController; 
     PlayerDetailViewController * playerDetailsViewController = [navigationController viewControllers][0]; //Super Ugly 
     playerDetailsViewController.delegate = self; 
    } 
} 

私は皆さんについてはわかりませんが、私はこのコードが非常に醜く、エラーが発生しやすいと感じました。

ストーリーボードの使用方法はありますか?私はxibファイルに戻ってもらえますか?

+0

あなたが説明してもらえ代わり

[navigationController viewControllers][0]; 

navigationController.topViewController 

を使用することができますか?あなたはifステートメントの比較を指していますか? –

+0

私は思う:)ただ珍しい – NeverBe

+1

私は実際にあなたがストーリーボードにランダムな文字列を入力し、比較を開始しなければならないという事実を醜いと私は非常にunmaintainable、カップリングされ、エラーが発生しやすい見つかった。コントローラー階層を移動する場合も同じです – Ecarrion

答えて

6

私は私が働いていた最後のアプリでかなりストーリーボードを扱っていましたが、定型コードはかなり時間が経つと迷惑をかけることに同意しましたが、私が知る限り、prepareForSegueはパラメータを渡す唯一の方法ですセグを使うとき カスタムビューコントローラにプロパティ/デリゲートを割り当てることはできません。

  • 私は唯一のiOS 5 & 6をターゲットならば、私は戻ってXIBのを使用してに行くだろうか? に依存します。

私は中小のアプリ(あまりにも多くのビューではなく、それらの間の多くのクロスナビゲーションではない)を構築しなければならない場合は、私は間違いなくストーリーボードを使用します。しかし、あなたが多くの意見を持っていて、それらの間で多くの前後のナビゲーションがあると、ストーリーボードをきれいに保つためには複雑になり、実際には最高のものではないものを自分自身に強要しているように感じます。

一方、ストーリーボードでは、最初から起動するときのアプリのフローや一般的な外観をもっと簡単に感じることができます。また、モックアップを作成して実際には実物。

本質的には、プロジェクトを開始するときのニーズに合っています。

EDIT:

考慮すべきもう一つのこと:あなたがチームで動作するようにSVN/Gitのまたは任意の他のVCSを使用している場合、ストーリーボード、ファイルの競合が総雌犬です。

+2

バージョン管理ファイルがStoryboardsと競合する場合は+1します。 Appleは複数の人がストーリーボードを編集しなければならないと思っていませんか?ちょっと –

+0

私はストーリーボードの競合を修正することから多くの頭痛を抱えていました...次のコミットでそれらを再び見つけるために – jere

2

これは、獣の性質です。 Objective-Cは、ココアの規約を使用して、冗長なコードではあるが、自己文書化しています。あなたの例を見れば、私はあなたの意図を決めるのに何の問題もありません。

これをきれいにしたい場合は、すべてをマクロにカプセル化して、1行に圧縮することができます。見ようとするほうが美しいかもしれませんが、それは確かに動物の維持に不必要な複雑さを加えるでしょう。エンドユーザーは、新しい機能の追加を妨げない限り、コードがどれほどきれいであるか気にしません。

ストーリーボードの議論については、確かに違いはありますが、現在は6ヶ月間使用していますが、個々のファイルを探す時間を費やすのではなく、1か所にすべてのペン先を置いていただきありがとうございます。視覚的なレイアウトで物事を見つけて、ラクダのケースファイル名を解析する方がはるかに簡単です。それは私だけです。

私のアドバイスは、時間を与えてください。あなたのワークフローを妨げることが数ヶ月で見つかった場合、是非、個々のペン先に戻ってください。彼らはどこにも行きません。少なくともしばらくの間。

ちょうど私の2セントです。がんばろう!

+1

私は最終製品にとって重要なのは製品そのものについてのことですが、エンジニアとしては最終製品だけではなく、もっと多くのことを心配しなければなりません。 – Ecarrion

5

私はマクロを作成したことが醜いコードであることに同意し、私のビジョンを滑らかにする:

#define WhenSegueIdentifierDo(segueIdentifier, block) if([segue.identifier isEqualToString:segueIdentifier]) block(); 

そして、私のprepareForSegue中:

WhenSegueIdentifierDo(kModalVC1ToVC2,^
{ 
    //code 
}); 

WhenSegueIdentifierDo(kModalVC1ToVC3,^
{ 
    //code 
}); 

私はまた、代わりにハードコードされた文字列の定数を使用します(私はストーリーボード上で使用することはできませんが)より美しく保つためです。遷移 + 原点ビューコントローラ名のK + タイプ + 先ビュー+にコントローラ名:私はまた、規則を使用します。

また、あなたが醜いと言う理由だけではなく、私の2セント...

+0

ブロックアプローチは実際にはきれいですが、ちょうどペン先/ xibに固執することに決めました。すべてのビューを1つのファイルにまとめるというのは嫌いです。それは非常に維持できない大チームです! – Ecarrion

+0

かなりクールなマクロ! – jere

関連する問題