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库的内部逻辑,因为我认为有时它不是很清楚。
我正在开发一个 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库的内部逻辑,因为我认为有时它不是很清楚。