PFQuery 始终 return 相同的结果,即使 Parse 服务器已更改

PFQuery always return same results even though Parse server changed

我正在开发一个 iOS 项目,使用 Parse.com 作为后端服务器。

基本上,我目前正在实现一个非常基本的功能,它只是简单地检索一些具有简单条件的对象。

但是,只有第一次才能正确检索对象。无论我如何通过 Web 更改 Parse "Core" 中的任何值,我仍然无法通过在应用程序中刷新来获取更新的值。

例如,我有一个名为 "Event" 的 class,字段是从 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()
                }
            }
        })

如果我删除设备中的应用程序并再次 运行 项目,它当然会从头开始重新加载所有内容,以便数据再次正确...

任何帮助将不胜感激!

终于自己锻炼了。我发现只要 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库的内部逻辑,因为我认为有时它不是很清楚。