2015-08-25 1 views
2

Я включил local datastore in app delegate, я сделал запрос, но как я могу сохранить эти объекты для их просмотра, если есть no internet?быстрый анализ, как сохранить объекты в локальном хранилище данных и показать их?

Вот мой запрос:

query.findObjectsInBackgroundWithBlock { 
     (objects, error) -> Void in 
     if error == nil && objects != nil 
     { 
      self.messages = objects! 
      for object in objects! { 
       inboxphotos.append(object.objectForKey("photo") as! PFFile) 
       inboxusers.append(object.objectForKey("username") as! String) } 
      } 
} 

Теперь, как я могу сделать local query для просмотра этой objects?

+0

Вы можете вызвать метод saveInBackgroundWithBlock в PFObject, чтобы сохранить его в локальной базе данных, помните, что локальная база данных должна быть включена в AppDelegate. И для получения данных создайте объект PFQuery и вызовите метод findObjectsInBackgroundWithBlock. – Suryakant

+0

@SuryakantSharma, когда я должен позвонить saveInBackgroundWithBlock? внутри findObjectsInBackgroundWithBlock или когда? – Salah

+1

нет! 'findObjectsInBackgroundWithBlock' предназначен для получения объекта из Parse DB с использованием' PFQuery' и 'saveInBackgroundWithBlock' предназначен для сохранения. – Suryakant

ответ

4

Перед вызовом findObjectsInBackgroundWithBlock,

query.fromLocalDatastore() 

Это заставит ваш запрос, чтобы вытащить из localDataStore. Ваш код должен выглядеть следующим образом:

query.fromLocalDatastore() 
query.findObjectsInBackgroundWithBlock { 
     (objects, error) -> Void in 
     if error == nil && objects != nil 
     { 
      self.messages = objects! 
      for object in objects! { 
       inboxphotos.append(object.objectForKey("photo") as! PFFile) 
       inboxusers.append(object.objectForKey("username") as! String) } 
      } 
} 

Для того, чтобы сохранить объекты локально, необходимо сначала включить localDataStore:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    Parse.enableLocalDatastore() 
    Parse.setApplicationId("parseAppId", clientKey: "parseClientKey") 
    } 
} 

Рекомендуемый способ для сохранения объектов с localDataStore является использование saveEventually:

myObject.saveEventually() 

Вы также можете использовать .pinInBackground() для сохранения объектов в локальном хранилище данных «постоянно». Прикрепление объектов гарантирует, что локальные объекты будут автоматически обновляться при их повторном извлечении с сервера. Это идеальный способ реализовать автономное кэширование данных сервера.

+0

спасибо, я сделал это, но у меня не было никаких результатов, потому что локальное хранилище данных пуста, можете ли вы отредактировать свой ответ и как сохранить объекты в локальном хранилище данных? – Salah