2015-11-02 3 views
1

Я пытаюсь обновить массив из PFObjects. В моем понимании, fetchAll() (в его асинхронных выводах) является правильным методом для обновления всех объектов, так как fetchAllIfNeeded() будет обновлять только PFObjects, у которых нет данных, связанных с ними. Однако каждый раз, когда выполняется fetchAll(), весь список PFObjects загружается снова, вне зависимости от того, были ли сделаны какие-либо изменения. Например, если у меня есть список сообщений, и я хотел бы проверить, были ли внесены какие-либо изменения в сообщения, в каждом случае будут загружаться все сообщения целиком (текст, изображения и т. Д.) Независимо от того, был ли отредактирован текст одного сообщения или даже если вообще были какие-либо изменения. Существует большая разница в потреблении данных при загрузке текста для одного атрибута PFObject и загрузки целого массива из них, в том числе изображений, и поэтому я хотел бы найти метод, который будет загружать только изменения. Это возможно?Извлечение только разных данных из Parse

Кроме того, если это возможно, существует ли способ получить список PFObjects, который необходимо обновить? то есть, если сообщения 4 и 12 нуждаются в обновлении из массива из 20, как я могу это узнать?

Спасибо.

+0

fetchAll делает, как это следует из названия - извлекает все объекты. Вы можете использовать PFQuery для столбца «updatedAt» для извлечения объектов, которые были обновлены с определенной даты/времени. Вам нужно будет отслеживать дату/время обновления локально – Paulw11

+0

Но есть ли способ загрузить только те объекты, которые были изменены на стороне сервера? – Acoop

+0

Да, выдайте PFQuery для объектов с 'updatedAt' временем после последнего проверки. Откликом будут объекты, которые были обновлены. – Paulw11

ответ

1

fetchAll делает, как следует из названия - выбирает все объекты. Вы можете использовать PFQuery против столбца updatedAt для извлечения объектов, которые были обновлены с определенной даты/времени. Вам нужно будет следить за ваше последнее обновлением даты/времени на местном уровне, скажем, с помощью NSUserDefaults -

let query=PFQuery.queryWithclassName("MyClass") 

let defaults=NSUserDefaults.standardUserDefaults() 

if let lastUpdateDate=defaults.objectForKey("lastUpdateDate") as? NSDate { 
    q.whereKey("updatedAt",greaterThan:lastUpdateDate) 
} 

q.findObjectsInBackgroundWithBlock({(objects:[AnyObject]!, error: NSError!) in 
     if(error == nil) { 

      defaults.setObject(NSDate(),forKey:"lastUpdateDate") 

      for object in objects { 
       ... 
      } 
     } else { 
      //Do something with error 
     } 
}) 
+0

@Acoop Примечание: у меня изначально было 'lessThan', это должно быть' largeThan' – Paulw11

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