2016-08-02 18 views
0

iOS用のParse SDKを使用して結果を改ページする適切な方法を見つけようとしています。私が持っている問題は、ページ付けしようとしているコンテンツが頻繁に変更される可能性があるということです。例えば動的コンテンツのページ分割

:サーバー上に格納されたオブジェクトの束を持つアプリ、および多数のオブジェクトが存在する場合には、最新の第一およびページ番号付きでソートされ、これらのオブジェクトを取得するための要求がある

。ユーザーがスクロールすると、現在のページの最後のオブジェクトに近づいているので、次のページが要求されます。

ユーザーがページ2にスクロールすると、新しいオブジェクトがオブジェクトのリストに追加され、ユーザーは別のページを上にスクロールします。次のページが要求されると、2番目のページで最後のメッセージの複製が得られます。ページ0はすでにロードされているため、新しいオブジェクトは表示されません。

どうすればこのように処理できますか?

オブジェクトが最も古い順にソートされた場合、実装はどのように変更されますか?

ご協力いただきありがとうございます。

編集:新しいオブジェクトが追加されるとき、それは私がとのトラブルを抱えているリクエストはありません

- (void)fetchObjectsForPage:(NSUInteger)page completion:(void (^)(NSArray *_Nullable objects, PageInfo *_Nullable pageInfo, NSError *_Nullable error))completion{ 
    PFQuery *query = [SomeObject query]; 
    [query orderByAscending:@"updatedAt"]; 
    [query setLimit:50]; 
    [query setSkip:50 * page]; 
    [query findObjectsInBackgroundWithBlock:^{NSArray *_Nullable objects, NSError *_Nullable error){ 
     ... 
     >>> Do error checking and return array along with paging info (total number of objects, page size) or error in completion block. 
    }]; 
} 

擬似コードを要求し、適切に表にページングを処理する方法を考え出すています。あなたは何ができるか

+0

リクエストを処理するクエリを貼り付けてください。 –

+0

このコードは、共有できないクライアントプロジェクト用です。私はいくつかの擬似コードを入れます。 – RPK

答えて

0

は次のとおりです。

  1. (あなたがやったように)リストから最後の項目を取る結果とセーブ取得する場合updatedAt
  2. によって順序を50行を返しますクエリを作成します。いくつかのグローバルプロパティーの項目updatedAt
  3. 次の呼び出しでは、setOffsetを使用せずに次の50行を取得し、updatedAtがグローバルオブジェクトのupdatedAtより大きい別の条件を追加します。あなたがあなたのコードは次のようになります。最後には、あなたのリストに

を重複したレコードを持っていないことを確認してください。この方法:あなたがupdatedAtを使用する場合

PFQuery *query = [PFQuery queryWithClassName:@"SomeClassName"]; 
[query orderByAscending:@"updatedAt"]; 
[query setLimit:50]; 

if (self.lastItemUpdatedAt){ 
    [query whereKey:@"updatedAt" greaterThan:self.lastItemUpdatedAt]; 
} 

[query findObjectsInBackgroundWithBlock:^(NSArray * _Nullable objects, NSError * _Nullable error) { 

    if (objects.count > 0){ 
     self.lastItemUpdatedAt = [[objects lastObject] updatedAt]; 
    } 

}]; 

は今、あなたのチャンスがありますさんはupdatedAtも変更されますので、誰かがオブジェクトを変更することを想定してみましょう(そう、それはあなたが保存されてupdatedAtより大きくなります)あなたはcreatedAt以来createdAt代わりのupdatedAtを使用することができ、この場合にはので、まだ重複を取得します意志変更しないでください

+0

ありがとうございます。それは間違いなく有用です。すでにページ0をフェッチした後に、新しいオブジェクトを追加する方法を教えてください。 (新しいアイテムはページ0のインデックス0になるため) – RPK

+0

アイテムを昇順に並べ替え、新しいオブジェクトが下部にくるようにします –

+0

ありがとうございました。これは受け入れられる答えのようです。 – RPK

関連する問題