我正在使用Parse.com作为后端服务器开发iOS项目。
基本上,我目前正在实现一个非常基本的功能,只需简单地检索一些具有简单条件的对象。
但是,只能在第一次正确检索对象。无论我如何改变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 :(得分: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库内部逻辑的评论,因为有时候我觉得不太清楚。