2016-01-21 4 views
0

Я разрабатываю проект iOS с использованием Parse.com в качестве серверного сервера.PFQuery всегда возвращает те же результаты, даже несмотря на то, что Parse-сервер изменен

В принципе, я в настоящее время реализую очень базовую функцию, которая просто извлекает некоторые объекты с простым условием.

Однако объекты могут быть восстановлены только в первый раз. Независимо от того, как я изменил значения в Parse «Core» через Web, я все равно не могу обновлять значения, обновляя приложение.

Например, у меня есть класс под названием «Событие», поля изменяются с Parse-сервера, но результат, который я получаю, никогда не обновляется.

 let eventServerQuery = Event.query() 
     // I tried to clear all cached results 
     PFQuery.clearAllCachedResults() 
     eventServerQuery?.whereKey(EventFields.Campus.rawValue, equalTo: campus!) 
     eventServerQuery?.findObjectsInBackgroundWithBlock({ (allEvents, error) -> Void in 
      self.refreshControl?.endRefreshing() 
      self.toggleRefreshButtonWithSpinner(false) 
      if error != nil { 
       print(error?.localizedDescription) 
      }else{ 
       if allEvents?.count > 0 { 
        // Display on the map 
        for eventObject in allEvents! { 
         let event = Event.initializeFieldsFromPFObject(eventObject) 
         self.delegate?.addEventToMap(event) 
         self.events.append(event) 
         print("\(event.updatedAt)") 
         print("\(event.title) has \(event.numberOfTasks) tasks") 
        } 
        // Event TVC data source 
        self.tableView.reloadData() 
       } 
      } 
     }) 

Если удалить приложение в моем устройстве и запустить проект снова, он будет, конечно, перезагружать все с нуля, так что данные снова станут правильными ...

Любая помощь будет оценена !

ответ

0

Наконец-то я сам разработал. Я обнаружил, что всякий раз, когда PFObject был закреплен, его поля не будут обновляться. Решение состоит в том, что перед загрузкой с сервера объект должен быть отключен.

 Event.unpinAllInBackground(events, block: { (success, error) -> Void in 
      if error != nil { 
       print(error?.localizedDescription) 
      }else{ 
       self.events.removeAll() 
       let eventServerQuery = Event.query() 
       eventServerQuery?.whereKey(EventFields.Campus.rawValue, equalTo: self.campus!) 
       eventServerQuery?.findObjectsInBackgroundWithBlock({ (allEvents, error) -> Void in 
        print("Debug: retrieving events from server") 
        self.refreshControl?.endRefreshing() 
        self.toggleRefreshButtonWithSpinner(false) 
        if error != nil { 
         print(error?.localizedDescription) 
        }else{ 
         if allEvents?.count > 0 { 
          // Display on the map 
          for eventOnline in allEvents! { 
           let event: Event = eventOnline as! Event 
           event.pinInBackground() 
           self.delegate?.addEventToMap(event) 
           self.events.append(event) 
          } 
          // Event TVC data source 
          self.tableView.reloadData() 
         } 
        } 
       }) 
      } 
     }) 

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