問題タブ [cocoa-design-patterns]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
284 参照

php - PHP でオブザーバー パターンを実装する価値はありますか?

オブザーバー パターンなど、PHP のデザイン パターンを使用するつもりでしたが、ページが読み込まれるたびにオブザーバーの関係を再作成しなければならないのが面倒です。参照はセッションで新しい具体的なオブジェクトとして保存されるため、GUID またはその他のプロパティを使用してルックアップを形成し、代わりにそのプロパティを保存しない限り、サブスクライバーとそのオブザーバーの間の関係を保持する方法はありません。

ページが読み込まれるたびにリレーションシップを再作成するコストがあるため、クリーンなデザインと比較して、PHP でオブザーバーなどのデザイン パターンを使用する価値はありますか? 共有する実世界の経験はありますか?

0 投票する
1 に答える
469 参照

iphone - 対応するUIViewControllerのモデル(representedObject)をいつリリースするか

AppKitでは「representedObject」を使用できますNSViewController。このrepresentedObjectは通常ModelControllerまたはNSViewController 表示されるモデルに設定されます。これは、新しいpresentedObjectを設定するだけで、モデルの詳細がビューで更新されるため、バインディングでうまく機能しますが、iPhoneの場合は(UIKit、Cocoaバインディングは利用できません)、そのようなrepresentedObjectがないUIViewControllerので、ここで私が知りたいことがいくつかあります:-

  1. モデルをUIViewControllerにバインドするための最良の/推奨される方法は何ですか?できれば、多くのデータを維持したくないIBOutlets場合は、セッターを呼び出して、ビューに表示するために変更されたモデルデータを更新します。
  2. UIViewControllerの関連モデルをいつどのようにリリースする必要がありますか?
  3. -[UIViewController dealloc]、通常のiPhoneアプリケーションで呼び出されます。

UIViewControllerビューとモデルの間の座標が、同時に、必要のないときにモデルのロックを解除するように、いくつかのクラスを設計することを探しています。

TIA。

0 投票する
3 に答える
1288 参照

objective-c - カスタム ビューに NSString を表示する

NSTextFieldNSButtonおよびNSView. に何かを入力しNSTextfieldてボタンを押すと、テキストが に描画されますNSView。これまでのところ、ビューを除いてすべてが接続され、機能しています。

ボタンを押すたびにテキストがビューに描画されるように、テキストとビューを接続するにはどうすればよいですか?

0 投票する
2 に答える
996 参照

iphone - 複数のUIViewController間でnibを再利用します

nibファイルにカスタムを作成しましUITableViewCellsたが、それを複数のファイルで使用したいと思いますUIViewControllers

誰かがそれを行うためのベストプラクティスの方法を教えてもらえますか?ペン先の読み込みに関する私の限られた知識は、InterfaceBuilderで単一の所有者クラスを指定する必要があることを示唆しているようです。

ありがとう。

0 投票する
2 に答える
396 参照

iphone - iPhoneのモーダルビューコントローラでプロパティを編集するには、どのパターンを使用する必要がありますか?

iPhoneのモーダルビューを介して基本的なプロパティ編集を実行するための適切なパターンを探しています。

連絡先アプリケーションのように機能するアプリケーションをまとめていると仮定します。「詳細」ビューコントローラは、連絡先のすべてのプロパティをUITableViewに表示します。UITableViewが編集モードに入ると、セルに開示アイコンが表示されます。セルをクリックすると、モーダル「エディター」ビューコントローラーにビューが表示され、ユーザーは選択したプロパティを変更できます。このビューには、多くの場合、単一のテキストボックスまたはピッカーのみが含まれます。ユーザーが[キャンセル/保存]をクリックすると、「エディター」ビューが閉じられ、「詳細」ビューが更新されます。

このシナリオでは、どのビューがモデルの更新を担当しますか?

「エディター」ビューは、Key-Valueコーディングを使用してプロパティを直接更新できます。これは、CoreDataBooksの例に表示されます。これは、プロパティをエディタービューコントローラーのモデルとして扱うため、ある程度は理にかなっています。

ただし、これはViewControllerプログラミングガイドで提案されているパターンではありません。これは、「エディター」ビューコントローラーが「詳細」コントローラーが採用するプロトコルを定義する必要があることを示唆しています。ユーザーが編集が完了したことを示すと、「詳細」ビューコントローラーが入力された値でコールバックされ、「エディター」ビューが閉じられます。このアプローチを使用して、「詳細」コントローラーはモデルを更新します。コールバックメソッドが1つしかないため、複数のプロパティに同じ「エディタ」ビューを使用している場合、このアプローチは問題があるように思われます。

どのアプローチが最も効果的かについて、フィードバックをお寄せください。

0 投票する
1 に答える
448 参照

objective-c - NSTableViewの条件付き列の値?

NSArrayControllerを介してNSMutableArrayにバインドするNSTableViewがあります。配列には派生クラスがあります。テーブルの最初の数列は、基本クラスに存在するプロパティにバインドされています。それはすべてうまくいきます。

問題が発生しているのは、行が1つの特定のサブクラスにマップされている場合にのみ入力する必要がある列です。列が表示することを意図したプロパティは、基本クラスの観点からは意味がないため、そのサブクラスにのみ存在します。ユーザーは、最初の2つの列から、3番目の列のセルが入力/編集可能であるかどうかを知ることができます。

3番目の列の値のバインディングはarrangedObjectsにあり、「foo.name」のようなモデルパスがあります。ここで、fooはサブクラスのプロパティです。ただし、階層内の他のサブクラスはfooのキー値に準拠していないため、これは機能しません。

私の唯一の選択は、fooを基本クラスのプロパティにして、全員がそれに応答するようにすることだと思われますが、これにより、モデルオブジェクトのインターフェイスが乱雑になります。

誰かがこの状況のた​​めのすっきりとしたデザインを思いついたことがありますか?それは珍しいことではありません(私はCocoaの比較的新参者であり、バインディングの詳細を学んでいます)。

0 投票する
1 に答える
254 参照

cocoa - CocoaでのMVC設計-3つすべてが常に必要ですか?また、命名規則、コントローラーを配置する場所

Webで多くの論文や情報を読んだことがありますが、MVCは初めてです。私はそれがやや曖昧であり、MVCパターンの多くの異なる解釈があることを知っています..しかし、違いはやや最小限に見えます

私の主な質問は、M、V、およびCは、これを正しく行うために常に必要になるのでしょうか。私が読んだことの中で、誰もこれに取り組んでいるのを見たことがありません。例(私はCocoa / Obj-cで作業していますが、それほど重要ではありません)。

1)GUIに単純な画像がある場合、またはユーザーの便宜のためだけに保存​​または変更されていないテキスト入力フィールドがある場合、これらは両方ともV(ビュー)になりますが、M(データもドメインもありません)はありません処理が進行中です)、それらをブリッジするCはありません。だから私は「V」であるいくつかの側面を持っています-問題ないようです

2)2つの異なる表示ウィンドウがあり、それぞれに「ACTIVATE FOO」というラベルの付いたボタンがあります。ユーザーがどちらかのボタンをクリックすると、両方のボタンが押されて「DEACTIVATE FOO」と表示され、3番目のウィンドウが表示されます。ラベル「FOO」。ボタンをもう一度クリックすると、両方のウィンドウのボタンが「ACTIVATE FOO」に変更され、3番目の「FOO」ウィンドウが削除されます。この場合、私のVは両方のウィンドウのボタンで構成されており、3番目のウィンドウ(おそらく3つのウィンドウすべて)も推測します。私は間違いなくCを持っています。私のコントローラーオブジェクトはこれらのボタンとウィンドウを認識し、クリックを取得してウィンドウとボタンに関する一般的な状態を保持します。ただし、ボタンが1つでも10つでも、ウィンドウの名前は「FOO」、ウィンドウの名前は「BAR」のどちらでも構いません。ここにはドメイン知識やデータはありません。ビューを制御するだけです。したがって、この例では、実際には「V」と「C」がありますが、「M」はありません。大丈夫ですか?

3)私が最も実行している最後の例。ビューとしてテキスト入力フィールドがあります。これにテキスト、たとえば重力を表す数値を入力すると、重力パラメータを考慮しながら、ボールの物理を計算するなどの処理を実行できるモデルに保持されます。ここにVとMがありますが、なぜCを追加する必要があるのか​​わかりません。コントローラーはビューからの信号を受け入れてモデルに渡すだけで、その逆も同様です。Cは単なるパススルーであるため、実際には「ジャンク」コードであり、私の意見ではこれ以上再利用可能にはなりません。ほとんどの場合、何かが変更されたときは、CとMの両方をほぼ同じ方法で変更する必要があります。ほとんどの状況でVとMのみが必要であると考えるのは、おそらくMVC初心者の間違いだと思います。次の主題に私を導きます。

4)Cocoa / Xcode / IBでは、コントローラーは常にIBでインスタンス化されたオブジェクトである必要があると思いますか?つまり、すべての「V」コンポーネントをIBに配置し、Viewオブジェクト(関連するもの)のコレクションごとに、インスタンス化されたコントローラーが必要ですか?そして、おそらく私のモデルはIBで見つけられるべきではなく、代わりにそこで見つけられたコントローラーコードと結びつくXcodeのクラスとしてのみ見つけられるべきです。これは正確ですか?これは、一貫性を維持しているため、実際には付加価値のないコントローラーを使用する理由を説明している可能性があります。

5)これらに名前を付けるのはどうですか?FOO / BARに関する上記の例では、FancyWindowOpeningControllerなどのようにControllerで終わるものがCになる可能性がありますか?モデルの場合-GravityBallPhysicsModelなどの接尾辞を付ける必要がありますか、それとも好きな名前を付けるだけですか?私は野生で何が起こっているのかを知るのに十分なコードを見ていません、そして私は早い段階で正しい軌道に乗りたいです

私をまっすぐにするか、私が正しい軌道に乗っていることを知らせてくれて、事前に感謝します。私はそれを理解し始めているように感じます、そして私がここで言うことのほとんどは理にかなっています、しかし私の推測の検証は私が自信を持って感じるのを助けるでしょう。

0 投票する
1 に答える
1756 参照

iphone - コアデータ、KVO、およびNSInternalInconsistencyException

Core DataとKVOを使用して、データストアへの保存をトリガーする値の変更を探しています。検索がに接続されたテーブルビューがありますNSFetchedResultsController。検索が変更されると、検索ボタンを押すと新しい結果コントローラーが作成されます。ユーザーが結果テーブルビューでアイテムを選択すると、ユーザーは詳細ビューに入り、編集を行うことができます。

これは私が問題に遭遇するところです。ユーザーが私が行った別のUIControlに変更を加えると、詳細ビ​​ューに通知されNSFetchedResultsController、テーブルビューがビュースタックに私をプッシュしたときから記憶しているビューを使用して、を取得NSManagedObjectContextして保存できます。そうすると、次のエラーが発生することがあります。

これは、検索を実行して、テーブルの一番上にないオブジェクトを一番上に移動したときに発生する傾向があることがわかりました。頭の後ろで何が悪いのか漠然と知っていますが、これを修正する方法についてのアドバイスをいただければ幸いです。

0 投票する
1 に答える
222 参照

iphone - ハイブリッド iPhone アプリを作成する最良の方法は何ですか?

サーバーから XML ファイル (または同様のもの) にアクセスする iPhone アプリケーションを開発しています。そのデータを、iPhone で洗練されたネイティブ UI に変換したいと考えています。私の現在の知識では、ファイルをロードして解析し、カスタム コードを記述してデータ構造を埋め、データをユーザー インターフェイス要素に変換することで、すでにこれを行うことができました。ただし、これは iPhone 開発ではよくある問題であることを知っているので、プロセスの一部を抽象化できる、より単純な方法があると考える傾向があります。

車輪の再発明をせずにハイブリッド アプリを作成するための最善かつ最も適切な方法は何ですか?

0 投票する
3 に答える
951 参照

objective-c - 継承された@propertyは、@財産?

私はプロトコルを持っています:

そして、次の実装(ゲッターとして、表示されていません)を持つ「抽象」基本クラス-(UIView *)view

しかし、次のようGadgetに、のサブクラスでプロトコルを実装するとAbstractGadget、次のようになります。

「警告:プロパティ'view'にはメソッド'-view'を定義する必要があります。」というコンパイラエラーが発生します。を使用する@dynamicか、スタブメソッドを追加することで、これをなくすことができます。

しかし、サポートされていないことをしているのか、すべきでないことをしているのか、それともコンパイラの制限/バグなのかを知りたいだけです。