我有一个UITableViewController,它显示来自Parse查询的数据。它获取数据并显示正常,除非我创建新对象并再次运行查询以获取新数据。当我创建一个新对象时,表视图会将现有数据保存在我的数组中并显示它,但它会将查询中的所有数据附加到数组中,因此在创建新对象之前已存在的对象会显示两次。我尝试在查询函数的开头清空数组,但由于我在查询中设置了skip属性,所以我不能这样做,因为如果达到限制,我的数组只会在跳过后获取所有内容。那么,我怎样才能将新对象添加到我的数组中呢?
我还应该提一下,我不能简单地在addCollection()中将新对象名称添加到数组中,因为我必须将objectId添加到我的objectID数组中。
func getCollections() {
activityIndicator?.startAnimating()
// collections = [] - Can't do this because of the skip (if the skip is used)
// objectID = []
let query = PFQuery(className: "Collections")
query.whereKey("user", equalTo: PFUser.currentUser()!)
query.orderByAscending("collectionName")
query.limit = limit
query.skip = skip
query.findObjectsInBackgroundWithBlock( {
(objects, error) -> Void in
if error == nil {
if let objects = objects as [PFObject]! {
for object in objects {
let collectionName = object["collectionName"] as! String
let id = object.objectId
self.collections.append(collectionName)
self.objectID.append(id!)
}
}
if objects!.count == self.limit {
self.skip += self.limit
self.getCollections()
}
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadData()
self.activityIndicator!.stopAnimating()
}
} else {
var errorString = String()
if let message = error!.userInfo["error"] {
errorString = message as! String
}
print(errorString)
}
})
}
func addCollection(name: String) {
let collection = PFObject(className: "Collections")
collection["user"] = PFUser.currentUser()
collection["collectionName"] = name
collection.saveInBackground()
getCollections()
}
答案 0 :(得分:2)
此代码在逻辑上存在缺陷,可以简化:
func addCollection(name: String) {
let collection = PFObject(className: "Collections")
collection["user"] = PFUser.currentUser()
collection["collectionName"] = name
collection.saveInBackground()
getCollections()
}
问题包括:
除非您需要检查其他用户的更新,否则您不应向服务器发出新请求以获取新的详细信息。相反,您应该在save
和其中添加完成块: