2016-01-21 31 views
0

我正在開發一個使用Parse.com作爲後端服務器的iOS項目。PFQuery總是返回相同的結果,即使解析服務器已更改

基本上,我目前正在實現一個非常基本的功能,只是簡單地檢索一些簡單條件的對象。

但是,只能在第一次正確檢索對象。無論我如何通過Web在Parse「Core」中更改任何值,我仍然無法通過在應用程序中刷新來獲取更新的值。

例如,我有一個名爲「Event」的類,這些字段從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庫的內部邏輯的註釋,因爲有時候我覺得它不是很清楚。

相關問題