問題タブ [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.
cocoa - ココア描画アプリケーションのアドバイス
私はCocoaを初めて使用し、経験豊富なCocoa-ersからのアプリケーションに関するちょっとしたアドバイスを探しています。
オブジェクトがキャンバスに描画/ドラッグされる基本的なOmniGraffleスタイルのアプリを作成しています。オブジェクトをキャンバスに配置した後、オブジェクトを選択して、プロパティ(塗りつぶしの色、線の色/幅など)を変更したり、サイズを変更したり、新しい位置に移動したりできます。
ウォームアップするために、カスタム上でマウスによって描画されるオブジェクト(円、長方形など)を作成しNSView
、オブジェクトをコレクションに追加し、NSArray
コレクションのコンテンツをビューにレンダリングする基本的な描画アプリを作成しました。 。この流れを続けることもできますが、オブジェクト選択の検出、zインデックスの解決、フォーカスの強調表示、ドラッグハンドルなど、関連するすべてのレンダリングのサポートを追加する必要があります。また、各サイクルですべてのオブジェクトをレンダリングすることは、ひどく無駄に思えます。
より良いアプローチは、軽量のビューオブジェクトをキャンバスにドロップして、マウスイベントを検出したり、自分自身とフォーカスリングを描画したりできるようにすることです。しかし、NSView
これらの特性を備えたオブジェクトのように見えますが、それが多くの荷物を伴う重量級のコンポーネントであるということについて、ウェブ上で多くのおしゃべりを目にします。私はNSCell
sに出くわし、それらを読みましたが、それらが正しい選択肢であるかどうかはわかりません。
助言がありますか?あなたが私を正しい方向に動かすことができれば、私はそれを大いに感謝します。
ios - クラスに複数の指定された初期化子があるのはいつですか?
フレームワーク開発者向けのヒントとテクニックに関するAppleのドキュメントを読んで、指定された初期化子に関する次のステートメントに出くわしました。
指定された初期化子は、スーパークラスのメソッドを呼び出すクラスのinitメソッドです
init
。(他の初期化子は、クラスによって定義されたメソッドを呼び出しinit
ます。)すべてのパブリッククラスには、1つ以上の指定された初期化子が必要です。
(強調が追加されました。)
私の理解に基づいて、そして実際、「指定された」という言葉の使用そのものに基づいて、クラスには指定された初期化子を1つだけ含める必要があります。ただし、ドキュメントによると、複数の指定された初期化子が受け入れられます。
2つ(またはそれ以上)の指定された初期化子があると仮定すると、それらの役割は、適切なオブジェクトの初期化を保証するために、スーパークラスの指定された初期化子を呼び出すことです。しかし、両方の指定された初期化子が同じスーパークラスの指定された初期化子を呼び出している場合、そもそも複数の必要性があったのはなぜですか?クラスをリファクタリングして、他のすべてのinit
メソッドを単一の指定された初期化子にファネルするべきではありませんか?
複数の指定された初期化子を必要とするユースケースまたはデザインパターンについて少し混乱していますか?
objective-c - NSCoder や NSKeyedUnarchiver は、同じオブジェクトの複数のデコードをどのように処理しますか?
NSCoder
複数のオブジェクトによって共有およびエンコードされたオブジェクトが、次にデコードされたときにどのように処理されるのか疑問に思っていました。オブジェクトのコピーを 2 つ作成するか、それとも 1 つのオブジェクトをデコードして、それをデコードする他のすべてのオブジェクト間で共有するか?
以下に、このような状況の小さな例を示しました。
例:
- アプリケーションが起動します
- オブジェクト A とオブジェクト B がオブジェクト C をデリゲートとして設定する
- アプリケーションは終了通知を受け取ります。
- オブジェクト A とオブジェクト Bは、自身とそのすべてのオブジェクト (デリゲートを含む) をエンコードします。
- アプリケーションがシャットダウンして再起動する
- オブジェクト A とオブジェクト Bは、自身とそのすべてのオブジェクト (デリゲートを含む) をデコードします。
ステップ 6 の後、オブジェクト A とオブジェクト B の両方が同じデコードされたオブジェクトを共有するでしょうか、それともそれぞれが独自のコピーを持っているでしょうか?
objective-c - NSObject を MainMenu.xib に追加すると、シングルトン オブジェクトが作成されますか?
NSObject AppController:NSObject があるとします。IB を使用して、NSObject コントロールを MainMenu.xib にドラッグし、クラスを AppController にポイントします。MainMenu.xib は一度読み込まれ、MainMenu.xib 内のオブジェクトはアプリの存続期間中メモリ内にあるため、AppController オブジェクトはシングルトンになりますか?
次に、IBOutlet を AppDelegate にドラッグして、このシングルトン オブジェクトにアクセスします。これは簡単な方法のように見えます。これは良い習慣ですか、それとも落胆すべきですか?
私が想定していた標準的な方法は、静的な AppController *sharedInstance をクラス内に追加し、アクセスに +(AppController *)sharedAppController を使用することです。
macos - データをインポートするためのコア データのベスト プラクティス
ストレージに CoreData を使用するアプリケーション (iPad & Mac Lion) があります。このアプリは、多数のハードウェア デバイスからデータをインポートし、データを多数の個別のイベントにデコードし、イベントのリストをユーザーに提示します。ユーザーは、保存するイベントを選択できます。
現時点では、イベントごとに CoreData 以外のオブジェクトを作成し、ユーザーが選択したものを CoreData エンティティに変換してストアに保存します。これは、基本的に各オブジェクトに対して 2 つのクラスがあることを意味します。1 つのマネージド CoreData オブジェクトと、ユーザーがイベントを選択する前にイベントを表す別の非マネージド オブジェクト。
これを行うには、より優れた、コードのオーバーヘッドが少ない(読み取り:より管理しやすい)方法があるに違いないと思います。
- ストアに保存せずにコア データ エンティティを作成し、ユーザーが選択したものだけを保存することはできますか?
- または、CoreData を使用して、これを構造化する他の方法はありますか?
objective-c - 接続されているビューを介して Custom Gesture からビュー コントローラーにアクセスするのは良いことですか?
ジェスチャーで 3D オブジェクトを操作しようとしています。私のタスクを達成するために、いくつかのカスタム GesturesRecognizer を実装する必要があります。
ジェスチャーを検出するためにUIGestureRecognizerをサブクラス化しています。
私がする必要があるのは、画面に描画されている 3D オブジェクトの頂点にアクセスすることです。ViewController クラスにこのデータがあります。たとえば、ファセット使用 r が接触している法線を知りたいとします。
ただし、何らかの方法でカスタム ジェスチャに接続される View から ViewController にアクセスしようとすることはできますが、これはオブジェクトにアクセスするための良い方法だとは思いません。
ここでの私の質問は...
ビュー コントローラで 3D オブジェクトの頂点/法線情報を保持する構造体のインスタンス変数を作成しても問題ありませんか。
そうでない場合、オブジェクトをレンダリングするためにそのような情報を保存する最良の方法は何でしょうか。
ここでもう一つ聞きたいのは
接続先のビューを介して Custom Gesture から View Controller にアクセスするのは良い方法ですか?
私の問題を処理する最善の方法を教えてください。
iphone - JSONオブジェクトに基づくデータ構造
JSONオブジェクトに関して利用したいMVCモデルに基づいた質問がありました。Webサービスからいくつかの値を解析していますが、現時点では、セキュリティ上の理由から、特定の時点でデバイスにクレデンシャルを保存したくありません。このオブジェクトに関する情報にアクセスできる多くのViewsControllerがある場合、すべてのViewControllerでオブジェクトを再作成するよりも、このオブジェクトをグローバルにアクセスでき、インスタンスが1つしかない「シングルトンオブジェクト」として使用することをお勧めします。また、jsonオブジェクトに関してある種のモデルを作成したいとしましょう。オブジェクトをjsonからそのような「モデル」にバインドするためのより良い方法は何でしょうか。それを行うための普遍的な方法はありますか、それとも単に「DIY」アプローチですか?
ありがとう。
c++ - C++ の通知センター
iOS および Mac のオブジェクティブ C フレームワークでしばらくプログラミングした後、NSNotificationCenter および NSNotification クラスによって実装される汎用通知パターンが好きになりました。C++ に戻ると、C++ は、ほとんどの場合に常に選択する言語であり、このパターンを複製しようとしていることに気づき、それをサポートする同様の C++ クラスの汎用実装が実際に既に存在するはずだと考えています。
パターンを C++ で実装するのは、Objective C のより動的な性質のため、Objective C よりもいくらか難しいように見えますが、不可能ではないようです。ブーストライブラリは一般的に素晴らしいものであり、そこで運が見つからないのは残念だったので、調べました。boost::bind、boost::lamda、boost::function はほとんどの作業を行っているように見えますが。明らかな何かを見逃しましたか?NSNotification/NSNotificationCenter の動作を簡単に複製できるものは既に存在しますか?
macos - 新しいコントローラのスーパークラスは何ですか?
私は、液体で満たされたシェルの高調波やその他の特性をモデル化するための社内プログラムの開発者です。現在、プログラム全体は、計算で一度に使用される物理的特性 (温度、圧力など) のセットが 1 つだけであると想定しています。すべての計算を Sphere モデルに分解しました。球を所有するコントローラーがあります。ユーザーが物理プロパティを変更すると、コントローラーは球にすべてを再計算させ、球の計算結果を表示しているすべてのウィンドウを更新します。
今、ある人から、温度と圧力の範囲で特定の高調波の周波数を表示する表を作成するように依頼されました。これには、他のすべてのウィンドウから独立している必要があるため、独自の球体モデルを持つ新しいコントローラーが必要になると思います。
ここに私の質問があります: 私の新しいコントローラーは NSWindowController サブクラスであるべきですか、それともテキストフィールドがコントローラーの値にバインドされている NSWindow であるプロパティ (またはまったく異なるもの) を持つ NSObject サブクラスであるべきですか? 私は会社で唯一の開発者であり、過去 4 年間このプログラムを書いていたので独学で Cocoa を学んだので、常にベスト プラクティスに従ってきたかどうかはわかりません。新しい重要な機能を導入しようとしているので、正しく機能していることを確認したいと思います。
これが問題かどうかはわかりませんが、組織内に G5 マシンがまだいくつかあるため、ソリューションは OS X 10.5 で実行する必要があります。
ios - Macアプリケーションでタブバーを使用する方法
Mac アプリケーション (ココア アプリ) を開発しようとしています。iPhone アプリでタブバーを使用することに成功しました。しかし、Macアプリケーションの開発では、どのようにタブバーを使用しますか?
iphoneアプリでタブバーを使っているので、Macアプリ(ココアアプリ)でも同じような機能を実装したいです。
どのように可能ですか?