2016-07-31 3 views
0

Я запускаю сервер анализа на AWS. Данные хранятся на mlab. При запуске приложения я делаю запрос:Parse - загрузка только обновленных строк данных

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

      }) 

Он возвращает мне все строки данных. Я сохраняю их локально с помощью CoreData. Когда какая-либо строка данных обновляется, я удаляю предыдущие локально сохраненные данные и снова загружаю все данные и сохраняю их. Это не очень хороший подход. Я хочу, чтобы я загружал только строки, которые обновляются не всеми строками. Как я могу это достичь? Благодарю.

+0

Этот вопрос, кажется, не имеют ничего общего с основными данными или Монго ... – Wain

ответ

1

, что вы можете сделать, это следующее:

Первый раз входе пользователя в систему для вашего приложения вам нужно запросить для всех строк пользователей с сервера, поэтому в этом случае вы будете выполнять запрос без каких-либо условий , В этом запросе вы можете использовать limit, чтобы ограничить результаты, которые будут возвращены сервером. Когда вы получите результаты от сервера, необходимо:

  • магазин все строки в локальной базе данных
  • магазин ток NSDate внутри NSUserDefaults

Следующий вызов к серверу будет получить только обновленные строки. Для того, чтобы достичь этого вам потребуется:

  • Получить последнюю дату синхронизации от ваших NSUserDefaults (тот, который мы сохранить выше)
  • Выполните запрос, но на этот раз с условием GreaterThan ваш lastSyncDate

в конце код для извлечения элементов должен выглядеть следующим образом:

// 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, которое позволяет легко хранить элементы анализа в локальной базе данных без использования основных данных. Parse локальное хранилище данных обеспечивается путем разбора IOS SDK и сэкономить много времени и усилий для вас, поэтому я настоятельно рекомендую вам использовать его. локальное хранилище данных также заботится о вас для объектов, которые были созданы/обновлены, и он автоматически создаст новый объект и обновит существующие.

вы можете прочитать об этом в here

Смежные вопросы