2016-07-31 8 views
0

AWSで解析サーバーを実行しています。データはmlabに保存されています。アプリの起動時に私はクエリを作成します:解析 - データの更新された行のみをダウンロードする

let query = PFQuery(className: foodDataClassName_) 
    query.findObjectsInBackgroundWithBlock({(objects : [PFObject]?,error : NSError?) -> Void in 

      }) 

私はすべてのデータ行を返します。 CoreDataを使用してローカルに保存します。データの行が更新されると、以前にローカルに保存されたデータが削除され、すべてのデータが再度ダウンロードされて保存されます。これは良いアプローチではありません。私が望むのは、すべての行ではなく更新された行だけをダウンロードするということです。それをどうすれば実現できますか?ありがとう。以下れる何を行うことができます

+0

でそれについての詳細を読むことができます... – Wain

答えて

1

あなたはどんな条件なしでクエリを実行します。この場合のように、サーバーからすべてのユーザーの行を照会する必要があり、ユーザーが自分のアプリにログインする最初の時間。このクエリでは、の制限を使用して、サーバーによって返される結果を制限することができます。あなたは、サーバーから結果を取得するときは、する必要があります:

  • ストア、ローカルデータベース内のすべての行
  • ストアNSUserDefaults
  • 内の現在NSDate

サーバーへの次の呼び出しは取得することになります更新された行のみ。

  • があなたのNSUserDefaultsから演算子:GreaterThanあなたlastSyncDateの条件で(私たちは上記の保存1)
  • クエリを実行しますが、この時間は、最後の同期の日付を取得します。それを達成するためにあなたがする必要があります。

最後にアイテムを取得するためにあなたのコードは、次のようになります。

// check if we synced the date before 
    let lastSyncDate = NSUserDefaults.standardUserDefaults().objectForKey("lastSyncDate") 
    let query = PFQuery(className: "MyParseObjectClassName") 

    if (lastSyncDate != nil){ 
     // get only records that were created/updated since the last sync date 
     query.whereKey("updatedAt", greaterThan: lastSyncDate!) 
    } 

    query.findObjectsInBackgroundWithBlock { 
     (objects: [PFObject]?, error: NSError?) -> Void in 

     // store objects in parse local data store 
     if (objects?.count > 0){ 
      PFObject.pinAllInBackground(objects) 
     } 

     // save the last sync date in user defaults 
     NSUserDefaults.standardUserDefaults().setValue(NSDate(), forKey: "lastSyncDate") 
     NSUserDefaults.standardUserDefaults().synchronize() 

    } 

ここにがあります。ここでは、ローカルデータストアを解析する方法を使用しています。これにより、コアデータを使用せずにローカルデータベースに解析オブジェクトを簡単に格納できます。 parseローカルデータストアは、iOS SDKを解析することによって提供され、時間と労力を大幅に節約できます。そのため、活用することを強くお勧めします。 ローカルデータストアも、作成/更新されたオブジェクトに注意し、自動的に新しいオブジェクトを作成し、既存のオブジェクトを更新します。

あなたはこの質問は、コアデータやモンゴとは何の関係もないように思わhere

関連する問題