2017-05-18 3 views
0

ディスクにキャッシュされているものを使用せずに最新バージョンのユーザーオブジェクトを把握できるように、現在のユーザーを更新してアプリケーションを再起動する必要があります。キーに参照ポインタフィールドを持つPFUserのサブクラスのデータがありません

User.current()?.fetchInBackground(block: { (user, error) in 
     //simply using a fetchInBackground won't fetch the entire reference field store in 
     // the user collection. In the case of using PFQuery, we could simply include the key for 
     // reference field. 
}) 

これらすべての参照フィールドに対して追加のフェッチを実行し、それに対応して現在のユーザーのフィールドを更新する必要がありますか?

答えて

0

フェッチは、データベースに格納されているデータのみを返します。ポインタの場合、これはポインタ、クラス名、およびそのオブジェクトのobjectIdを指定する単なる基本JSONオブジェクトです。このデータを返すには、Parse Queryを使用して、必要なフィールドを追加する必要があります。 Includeはドット表記で動作するので、objectBのポインタとして格納されているobjectCのすべてのデータを含むobjectAQuery.include("objectB.objectC")のような処理を行うことができます。私が間違っていなければ、objectBのすべてのデータは含まれませんが、確実に言い表せません。

最後に、query.get()を使用して、特定のobjectIdを持つオブジェクトを取得します。ただし、オブジェクトが存在しない場合はエラーが発生しますので、適切に処理するようにしてください。 objectIdでquery equalToを使用してからquery.first()を呼び出すこともできますが、getをお勧めします。

+0

注 - 私の例ではSwiftではなくJSを使用しているため、関数名は異なる場合がありますが、同等のものが両方のSDKに確実に存在します。 –

+0

私は対応するデータを取得するためにクエリを使用することができますが、私は1回のパスでそれを行うことはできますか?問題は、PFUserがキャッシュされてディスクに保存されていることです。アプリケーションを起動するたびに、キャッシュ内のキャッシュを使用せずにリモートデータベースから現在のユーザーを更新することが期待されます。通常、fetchIfNeedを使用してレシーバを新しい値に更新します。オブジェクトにポインタフィールドがある場合にどのように処理されるかはわかりません。 –

+0

fetchIfNeededは、自分が行っていると思われることをしません。 fetchIfNeededは、たとえば、オブジェクトBへのポインタを持つオブジェクトAでフェッチを呼び出し、オブジェクトBでfetchIfNeededを呼び出す場合にのみフェッチします。または、新しいPFObjectを作成してIDを手動で設定した場合は、fetchIfNeededを呼び出します。必要に応じてフェッチすると、以前フェッチされたオブジェクトはフェッチされません。オブジェクトがフェッチされるとすぐに、fetchIfNeededがフェッチするかどうかを決定するブール値が反転されます。新しい情報があるときはいつでも取得しません。 –

関連する問題