問題タブ [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 投票する
1 に答える
3777 参照

iphone - 1 つの UITableView - 複数の DataSource、最適なデザイン パターン?

これは典型的な問題のように思えますが、2 つの別々のデータ ソースに対して同じ動作をする UITableView があります。重複が少なく、if/else 条件がないようにクラス階層を設計する最善の方法は何ですか? ビュー コントローラーは、両方のデータ ソースに対してまったく同じことを行います。それらはデータ セット内で一意です。親コントローラーにデータ ソース/それぞれのタイトルを設定させる必要がありますか?

UISegmentControl を使用して、インターフェイスは同じだがデータ ソースが異なる 2 つのビューを表示する場合にも、同じ問題が発生します。

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

iphone - iPhone SDKで単純なオブジェクトをシリアル化するにはどうすればよいですか?

オブジェクトの辞書があります。それらはすべてシリアライズ可能であるべき POCO オブジェクトです。これらをディスクに書き込むには、どのような手法を検討する必要がありますか。状態を保存するためにいくつかのリストを作成する最も簡単なオプションを探しています。

私には3つの選択肢があると思います。

  1. plist ファイル。ただし、これは事前定義されたオブジェクト (文字列、数字など) のみを保存することに制限されているようです (名前と年齢を持つ人物など)。

  2. コアデータ。(3.0 の新機能) これはうまく機能します。ただし、これを機能させるには、データ モデルを変更する必要があります。これは大規模な再作業になるため、努力する価値があるかどうかはわかりません。

  3. SQLライト。読み書きする単純な SQL データベースを実装します。私はこれについて最小限の調査を行いましたが、コア データ ORM 関数の一部を「書き直す」必要はありません。

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

iphone - Core Data を使用してリモート データにアクセスするためのパターンは?

外部データ ソースを使用する iPhone 用の Core Data アプリケーションを作成しようとしています。オブジェクトを永続化するために Core Data を実際に使用しているのではなく、オブジェクトのライフサイクル管理のために使用しています。Core Data をローカル データに使用する方法についてはかなり良いアイデアがありますが、リモート データでいくつかの問題に遭遇しました。例として Flickr の API を使用します。

まず、最近の写真のリストが必要な場合は、外部データ ソースから写真を取得する必要があります。リストを取得したら、写真ごとに反復して管理対象オブジェクトを作成する必要があるようです。この時点で、コードを続行し、標準の Core Data API を使用してフェッチ リクエストを設定し、犬などの写真のサブセットを取得できます。

しかし、続けてユーザーの写真のリストを取得したい場合はどうすればよいでしょうか。これら 2 つのデータ セットが交差する可能性があるため、既存のデータに対してフェッチ リクエストを実行し、既存のものを更新してから、新しいオブジェクトを挿入する必要がありますか?

--

古いパターンでは、これらのデータ セットごとに個別のデータ構造を用意し、それらに適切にアクセスするだけでした。recentPhotos セットと usersPhotos セット。しかし、Core Data の一般的なパターンは 1 つの管理対象オブジェクト コンテキストを使用するように思われるため、データをメインのデータ プールとマージする必要があるようです (私が間違っている可能性があります)。しかし、写真のリストを取得するだけでも、かなりのオーバーヘッドがかかるようです。セットごとに別の管理対象オブジェクト コンテキストを作成する必要がありますか? ここでも Core Data を使用する必要がありますか?

Core Data について私が魅力的だと思うのは、以前は (Web サービスの場合) 特定のデータを要求し、要求でフィルター処理するか、コードでフィルター処理して、使用するリストを生成していたことです。Core Data を使用すると、オブジェクトのリストを取得してプールに追加し (必要に応じて古いオブジェクトを更新)、それに対してクエリを実行できます。ただし、このアプローチでわかる 1 つの問題は、オブジェクトが外部から削除された場合、古いデータを保持しているため、それを知ることができないということです。

私はここで基地から離れていますか?リモート データとコア データを処理するために人々が従うパターンはありますか? :) 私は、彼らがそれをやったと言っている人々の投稿をいくつか見つけました。ありがとう。

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

core-data - コア データ: デザインの質問。オブジェクトラッパーかどうか?

Core Data (iPhone 用) を使用して最初のプロジェクトを設計していますが、設計アプローチに関連する可能性のある問題がいくつかあります。

ユーザーが注文を作成できるアプリケーションを実行しています (レストランの場合としましょう)。グラフィック デザイナーを使用して永続化オブジェクト (OrdeMO) をモデル化しています。管理対象オブジェクトであることを示すために、各名前の先頭に MO を追加します。XCode を使用して、Managed Object Class を自動的に作成します。

Managed Context で新しいオブジェクトを検索または作成できる "DAO" クラスをいくつか作成しました。

今私の問題に。

ユーザーが作成している注文を保存するために OrderMO オブジェクトを作成したいのですが、ユーザーが実際に注文するまで、それをコンテキストの一部にしたくありません。[OrderMO alloc] を使用してオブジェクトを作成しようとしましたが、取得したオブジェクトは「不完全」であり、その属性を設定しようとするとエラーが発生します。

問題は、それを使用するためにコンテキスト内で注文を作成する必要があることだと思います。そうですか?

私はさまざまなオプションを検討しました:

  1. コンテキストでオブジェクトを作成し、ユーザーが注文を破棄した場合はユーザー ロールバックを作成します。問題は、ユーザーがプロセス中に他のコンテキスト オブジェクト (設定など) を保存する可能性があるため、これが機能しないことです。「別のトランザクション内」でオブジェクトを作成する方法はありますか?

  2. MO と同じデータを保持するラッパー オブジェクトを作成し、ユーザーが注文したときにのみ MO を作成します。これの欠点は、新しいクラスを維持しなければならないことです。

  3. MO に「placed」などの属性を作成し、コンテキストで検索をフィルタリングするために使用します。これの問題は、ドメイン内に「ゴミ」オブジェクト (つまり、未配置の注文) が残り、時々クリーンアップを行う必要があることです...

他に選択肢はありますか?

どんな提案でも大歓迎です。

ありがとう(この長い投稿を読んでくれて!)ゴンソ

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

iphone - Core Data がサポートする UITableView とインデックス作成

インデックス作成をサポートする Core Data に裏打ちされた UITableView を実装しようとしています (例: 横に表示される文字、およびそれらに付随するセクション ヘッダー)。Core Data を使用せずにこれを実装するのにまったく問題はありません:

また、インデックスを使用せずに Core Data に基づく UITableView を実装しても問題ありません。

私が理解しようとしているのは、2つをエレガントに組み合わせる方法ですか? 明らかに、コンテンツをインデックス化して再セクション化すると、標準の NSFetchedResultsController を使用して特定のインデックス パスにあるものを取得できなくなります。そのため、インデックス文字を NSArray に格納し、インデックス付きコンテンツを NSDictionary に格納しています。これはすべて表示には問題なく機能しますが、行の追加と削除、特にこれらのメソッドを適切に実装する方法に関しては、いくつかの頭痛の種があります。

返されたインデックス パスは、コア データのものと相関関係がないためです。ユーザーが行を追加するときにインデックス NSArray と NSDictionary を再構築するだけで機能を追加できますが、行を削除するときに同じことを行うと、アプリケーション全体がクラッシュします。

このすべてを適切に機能させるために、ここに欠けている簡単なパターン/例はありますか?

編集: 明確にするために、 NSFetchedResultsController がすぐに使用できることを知っていますが、私が望むのは、インデックスが人の名の最初の文字である連絡先アプリのような機能を複製することです。

0 投票する
4 に答える
490 参照

iphone - 保持されたプロパティに新しいオブジェクトを割り当てるためのベスト プラクティスは?

iPhone アプリに Core Data を使用しています。私の属性は保持されたプロパティで設定されています。

たとえば、「モノ」エンティティの「数値」属性:

私のコードで Thing オブジェクトを操作するとき、次のように number プロパティを設定しています。

ただし、これによりメモリ リークが発生します (新しい NSNumber オブジェクトの保持カウントは、alloc とプロパティ保持により、必要な数よりも 1 つ多くなります)。

これは iPhone OS 用であるため、自分でメモリを管理したいので、自動解放プールを使用しないことを選択しています (これには、パフォーマンスが向上し、最大メモリ使用量が少なくなるという利点もあります)。

  1. 私はこのパターンが機能することを知っています (そして、すでにいくつかの SO 投稿で議論されています):

    このパターンは非常に明確ですが、私は 3 行や一時変数について興奮していません。

  2. これもうまくいくと思います(ただし、SOの投稿では気づきませんでした):

    このパターンはあまり明確ではありませんが、2 行しか必要とせず、一時変数を使用しません。

質問
(自動解放プールを使用せずに) 保持されたプロパティに新しいオブジェクトを割り当てるための他のパタ​​ーンはありますか? ここでのベストプラクティスは何ですか?

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

iphone - データ駆動型の TableView をカスタマイズする

1 つのセクションに XML データが取り込まれたグループ化されたテーブルビューがあります。私がやりたいことは、データ駆動型のセクションの前に別のセクションを作成し、それにアクションを適用することです。

例:

ユーザーには「現在地を使用する」というボタンが表示され (手動で作成されたセクション)、その下にはユーザーが代わりに選択できる国のリスト (データ駆動型セクション) が表示されます。

設定メニューをガイドとして使用してください。セクション内の単一の行であるいくつかのオプションがあるため、それらはボタンのように見えます...

これが意味をなさない場合は、より適切に説明しようとします。


だから私はこれらの2つの明らかなコード行を持っています...十分に単純です

私が望むのは、numberOfSectionsInTableView2 を返し、最初の「セクション」に「クリックして現在の場所を使用する」と表示させ、地図を表示し、2 番目のセクションに現在作業している国のリストを表示することです。

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

objective-c - tableView: titleForHeaderInSection: クラッシュの原因

なんらかの理由で、tableView: titleForHeaderInSection:メソッドがアプリケーションをクラッシュさせていますが、その理由については詳しく説明されていません。コメントアウトすると、明らかにヘッダーなしでテーブルがロードされるため、このメソッドであることはわかっています。

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

iphone - 2 つの iPhone 子ビュー間でデータを交換する

ある子ビューから別の子ビューにデータを送信する方法を研究しています。アプリケーションにはいくつかのビューがあり、そのうちの 1 つは一種のリアルタイム設定ビューです。設定の変更は、他のビュー内のものに影響するはずです。

NSUserDefaultsは人気があるようですが、永続的なデータやデータベース/ファイルへの自動保存は必要ありません。私が避けたい潜在的な減速のように見えます。

2 番目に人気があるのは、いくつかの共通のトップ レベル オブジェクトへの参照を各子ビューに渡すことです。これを行う方法を詳しく教えてくれるチュートリアルが見つかりませんでした...おそらくとても簡単で、チュートリアルは必要ありません-一度理解したら! 正しい方向(URL)を教えていただければ幸いです。

質問: 1 つの「シングルトン オブジェクト」を使用して「グローバル データ」を保存し、いつでもどこからでもアクセスすることを考えています。これで何が問題になる可能性がありますか?たとえば appDelegate.m に作成すると、誰かがアクセスしようとする前に存在するはずですよね?

このサンプルコードを見ています。

0 投票する
4 に答える
24281 参照

iphone - デリゲートとデリゲート メソッドとは

みんな私にデリゲートとデリゲートメソッドの違いとその違いとその使い方を教えてください???