1

これは でタグ付けされてiOSいますが、他の Parse SDK にも役立つと確信しています。ご存じかもしれませんが、Parse はネイティブPFObjectサブクラスを作成する機能をiOSSDK に追加しました。これは、いくつかの理由から素晴らしい追加です。まず、オブジェクト属性の動的プロパティを作成することで、コンパイラがコードをチェックできるようにします。

myObject[@"myAttribute"]に変換されますmyObject.myAttribute

2 番目に、この質問にとってより重要なことは、カスタム サブクラスに機能を追加できることです。たとえば、Alarmオブジェクトを Parse クラウドに保存するアラーム アプリを作成したとします。+ (instancetype)objectカスタム サブクラスでは、 、- (void)saveEventually、および- (void)deleteEventuallyメソッドをオーバーライドして、作成、変更、または削除時にオブジェクト自体をalarmスケジュール/更新/削除できるようにします。UILocalNotification

ここで問題が複雑になり、私の実際の質問が出てきます。ユーザーが 1 つのデバイスでアラームを作成し (クラウドにアップロード)、別のデバイスに自動的に同期するとします。PFQuery2 番目のデバイスは、バックグラウンドで's'を使用してコンテンツを更新し、各オブジェクトを- (BFTask *)findObjectsInBackground呼び出し- (BFTask *)fetchIfNecessaryInBackgroundて、その実体がすべてデバイス上にあることを確認します。PFObject私の質問は、Parse クラウド データベースからサブクラスが見つかった/フェッチされたときに、どのメソッドが呼び出されるかということです。さらに言えば、ローカル データストアから初期化されたオブジェクトについてはどうでしょうか。

前述したように、さまざまなメソッドのオーバーライドは、デバイス上で作成および管理されるオブジェクトに対しては完全に機能しますが、ローカルまたはリモートのデータストアからメモリに到着したばかりの新しいオブジェクト内からカスタム コードを実行する方法については困惑しています。これを処理する方法についての考えや提案は大歓迎です。Parse のドキュメントはそのようなケースをカバーしていないため、ベスト プラクティスでさえないかもしれませんが、そうすべきだと私には思えます。とにかく、あなたの時間とあなたの洞察に感謝します。

4

1 に答える 1

0

のほとんどのサブクラスに関してはNSObject、おそらくメソッドをオーバーライドする-init方法です。

ただし、最後の段落で述べたように、そのような慣行は文書化されておらず、おそらく避けるべきです。作業方法により、同じオブジェクトの複数のインスタンスをメモリ内に持つことができます (同じPFObjectsを持つ複数)。また、これらのオブジェクトが作成される時期や理由を制御することはできないため、初期化時に実行されるコードに依存することは、おそらく悪い考えです。Core Data を使用している場合、Parse は実際には別の方法で物事を処理するため、ベスト プラクティスが異なることに注意してください。PFObjectsobjectId

たとえば、これが事実であると言っているわけではありませんが、保存する前に各オブジェクトのコピーが作成された場合はどうなるでしょうか? 「キャッシュからネットワーク」ポリシーを使用してクエリを作成したときに、オブジェクトが 2 回作成された場合はどうなりますか? 機能させたとしても、フレームワークの更新ごとに壊れる可能性のあるものになってしまいます。

クエリまたはローカル データストアからオブジェクトを受け取ったときにオブジェクトに対して自分自身を呼び出す独自のメソッドに、初期化コードをバンドルする必要があると思います。オーバーライドは、オブジェクト指向プログラミングにおける優れた設計および実践ですが、いくつかの例外があり、これはその 1 つだと思います。

于 2015-01-21T14:15:57.987 に答える