12

短い質問

ObjectXCodeのインターフェイスビルダーのオブジェクトライブラリに呼ばれるものがあります。この「オブジェクト」を使えば、どんな仕事ができるのだろうか。

具体的には、NSObjectストーリーボード(またはxib)にあります。それは次のように説明されています:

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

長い質問

UITableViewControllerと一緒にビルドしようとしていUISearchControllerます。UITableViewDelegateどちらもデリゲートにとを実装する必要があるため、のデリゲートをMain以外のオブジェクトUITableViewDatasourceに割り当てることができればと思います。UISearchControllerUITableViewController

でデリゲートを手動で割り当てるのではなく、ストーリーボードでこれを実現する方法を探していviewDidLoadます。特に、ストーリーボードでどのようにObject機能するかを理解することによって。

UITableViewの親を調べることで、それらを区別できることを理解しています。ただし、ロジックを異なるオブジェクトに分離することは常に良いことです。実装が容易になり、効率が向上し、構造が向上し、再利用が可能になります。

前もって感謝します。

私が試したこと

  • ストーリーボードのObjectと同じレベルにを配置します(別のレベルにUITableViewController配置することはできません)。 でリンクします。 で印刷すると、ポインタであることがわかります。運がない。ObjectUIViewController
    @property (nonatomic, weak) IBOutlet NSObject *UITableViewController
    NSObject *nilviewDidLoad
  • プロパティをに変更する@property (nonatomic, strong)と、のUICustomObject代わりになりnilます。私は正しい方向に進んでいるようです。
4

2 に答える 2

9

お気づきのように、 Object は、独自のカスタム クラスを含む任意のクラスのオブジェクトが、XIB/ストーリーボードが読み込まれるときにインスタンス化されるようにします。UICustomObject を取得しているという事実は、XIB/ストーリーボードの読み込み機構が、オブジェクトがどのクラスであるべきかを認識していないか、指定したクラスを (ランタイム ルックアップを介して) 見つけられないことを示しています。

解決策は、カスタム クラス インスペクターでオブジェクトに適切なクラスを指定することです。

ここに画像の説明を入力

もちろん、問題のクラスの実装ファイルがプロジェクトにあり、ターゲットに含まれていることも確認する必要があります。

最後に、strongカスタム オブジェクトを指す IBOutlet に使用するのは正しいことです。これは、トップ レベルのオブジェクトであり、プロパティを使用してトップ レベルのオブジェクトを参照する必要があるためstrongです。(本当に興味があるなら、Mike Ash が XIB/Storyboard アウトレットのメモリ管理の詳細についての良い記事を持っています。これには、この点に関する OS X と iOS の違いが含まれます。)

于 2012-07-22T03:32:31.237 に答える
5

この質問は回答済みとしてマークされていますが、複数の回答が存在する可能性がある未解決の質問であるため、あなたが言うように行うための巧妙な手法があります-著者が「動作」と呼ぶ単一の役割クラスに機能を分割します:

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

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

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

そして最後に、@Andrew は彼の回答で、オブジェクトを強力なプロパティとして保存することの重要性について言及しました。彼らは前述の記事の著者です - 彼を "Krzysztof" と呼びましょう。obj-c に関連付けられたオブジェクト メカニズムを使用して、コードなしで構成可能にするソリューションを提供します。あなたのマイレージはこれで非常に大きくなるかもしれません.Swiftにはより良いオプションがあるかもしれません.

于 2014-10-13T18:40:05.750 に答える