2012-07-22 9 views
9

ショート質問ストーリーボードのオブジェクトライブラリの「オブジェクト」は何をすることができますか?

のXCodeのインターフェイスビルダーのオブジェクトライブラリにObjectと呼ばれる事があります。私はこの "オブジェクト"を使ってどのようなタスクを達成できるのだろうかと思います。

具体的には、ストーリーボード(またはxib)にはNSObjectです。

Interface Builderで直接利用できないオブジェクトのテンプレートを提供します。カスタムクラスインスペクタを使用して、このオブジェクトを任意のクラスのインスタンスにすることができます。

ロング質問

私はUISearchControllerとともにUITableViewControllerを構築しようとしています。彼らはどちらもデリゲートにUITableViewDelegateUITableViewDatasourceを実装する必要があるので、UISearchControllerの代理人をUITableViewControllerというメイン以外のオブジェクトに割り当てることができます。

私はストーリーボードでこれを達成する方法を探しています。代理人を手動でviewDidLoadに割り当てるのではなく、特に、Objectがストーリーボードでどのように機能するかを把握することで、

私は、私がUITableViewの両親を試験で区別できることを理解します。しかし、ロジックを別々のオブジェクトに分離することは常に良いことです。実装が容易で、効率が良く、構造が整っていて、再利用が可能です。

ありがとうございます。私は、ストーリーボードでUITableViewControllerの同じレベル(あなたが別のUIViewControllerObjectを置くことができない)でObjectを入れ

  • を試してみましたが、何


    UITableViewController@property (nonatomic, weak) IBOutlet NSObject *とリンクしてください。
    は、viewDidLoadに印刷するとnilポインタになります。運がない。

  • プロパティを@property (nonatomic, strong)に変更すると、nilの代わりにUICustomObjectになります。私は正しい道にいるようだ。
+0

'Object'は、カスタムクラスとその入力と出力用のInterface Builderリンクを提供するために使用されます。 – esqew

+0

私はそれを得ていると思う。周りをプレイしようとしています。コメントありがとう。 –

答えて

9

注意しておきますが、Objectは、XIB/Storyboardの読み込み時に、独自のカスタムクラスを含む任意のクラスのオブジェクトがインスタンス化されるようにします。 UICustomObjectを取得しているということは、XIB/Storyboardの読み込み機構が、オブジェクトがどのクラスであるかを知らないか、指定したクラスをランタイムルックアップで見つけることができないことを示します。

ソリューションでは、カスタムクラスインスペクタでのオブジェクトのための右のクラスを指定することを確認することです。

enter image description hereその後も確認する必要があり、もちろん

そのクラスでの実装ファイル質問はあなたのプロジェクトにあり、あなたのターゲットに含まれています。

最終的には、カスタムオブジェクトを指し示すIBOutletにはstrongを使用するのが正しいです。これはトップレベルのオブジェクトで、トップレベルのオブジェクトはstrongのプロパティを使用して参照する必要があるためです。あなたが本当に好奇心が強いのであれば、Mike Ash氏はOS XとiOSの違いを含めてXIB/Storyboardコンセントのメモリ管理の詳細についてはarticleといいます。

+0

この良い説明をありがとう。これらの他に、興味深い事実もいくつか発見しました。 1.このオブジェクトはStoryboardによって実行時に作成されるため、イニシャライザの引数を指定することはできません。 2.オブジェクト自体は、セグに接続することも、呼び出すこともできません。メインビューコントローラを呼び出す必要があります。 –

+0

親愛なる@AndrewMadsen、あなたはこの1つの答えを知ることができます.. http://stackoverflow.com/q/26043973/294884 ...私はそれがこれらの神秘的な "オブジェクト"オブジェクトに関連して薄く!歓声... – Fattie

5

この質問は回答済みです。

http://www.objc.io/issue-13/behaviors.html

:著者は「行動」と呼んで、単一の役割クラスに機能を分割 - それは複数回答が可能いる未解決の問題があるので、しかし、あなたが言うように行うための巧妙な技術があります

その要点は、たとえばコンセントを複数のビューに公開することによって視差効果を実行するオブジェクトを作成できることです。スクロールビューデリゲートとして設定され、構成可能な設定に基づいて他のビューが更新されます。あなたが指摘したように、コンストラクタに引数を渡すことはできませんが、@ Andrewの解答の画像に示されているキーパスメカニズムを使ってパラメータを指定することはできます。

これまで述べてきたように、スクロールイベントなどに応答するさまざまなオブジェクトが必要な場合は、問題に対処することができます。著者は単純なマルチプレクサをコーディングすることでこれに対処しました。あなたは責任パターンの連鎖でこれを解決することもできます:http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern

最後に、@Andrewは、彼の答えでオブジェクトを強力な財産として保管することの重要性を述べました。彼等は前述の記事の著者である "Krzysztof"と呼ぶだけで、obj-cに関連付けられたオブジェクトメカニズムを使用してコードなしで構成可能にするソリューションを提供しています。あなたの走行距離はこれと非常によく似ていますが、スウィフトでは今より良い選択肢があるかもしれませんが、少なくとも、思考には良い食べ物です。

関連する問題