gpt4 book ai didi

ios - 使用其他解析查询的结果过滤解析查询不起作用 - Swift

转载 作者:行者123 更新时间:2023-11-30 14:13:32 25 4
gpt4 key购买 nike

我已经在 Swift 应用程序中设置了 Parse 后端,以便我有一个关于绘画的类(class)和另一个关于用户的类(class)。

我还有一个类,其中包含指向绘画和用户的指针,以便每个用户都可以对绘画进行评分: enter image description here

在我的主 TableView 中,我想加载当前登录用户已评分的所有绘画。为此,我使用以下代码:

var paintingArray: [AnyObject] = []

// Define the query that will provide the data for the table view
override func queryForTable() -> PFQuery {

//Find User Painting Relations to display
var relationQuery = PFQuery(className:"UserPaintingRelation")
relationQuery.whereKey("userID", equalTo:PFUser.currentUser()!)

relationQuery.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]?, error: NSError?) -> Void in

if error == nil {
// The find succeeded.
// Do something with the found objects
if let objects = objects as? [PFObject] {
for object in objects {
println(object.objectId)

//Add the paintingID of the current object to array
var paintingObjectId: AnyObject? = object["paintingID"]!.objectId
var paintingObjectIdString:String = paintingObjectId as! String
self.paintingArray.append(paintingObjectIdString)
}

}
} else {
// Log details of the failure
println("Error: \(error!) \(error!.userInfo!)")
}

}

//Query that loads relevant Painting objects
var query = PFQuery(className: "Painting")
//Make sure only the objects that are referenced in the paintingArray are loaded
query.whereKey("objectId", containedIn: self.paintingArray)

return query
}

此代码不会引发任何错误。但是,在模拟器中我的表格 View 似乎是空的。如果我使用正确的 PaintingID 来过滤我的查询:

query.whereKey("objectId", equalTo:"yd62zCrXR7")

而不是:

query.whereKey("objectId", containedIn: self.paintingArray)

TableView 中显示一个对象。

这让我相信第二个查询是在数组填充正确的字符串之前执行的,这导致 TableView 不加载任何对象。这个假设正确吗?如果是这样,我是否可以确保在执行第二个查询之前,paintingArray 完成从relationQuery 加载所有字符串?

非常感谢,非常感谢所有帮助!对 Swift 来说还是个新手,所以我无法真正理解到底出了什么问题。

最佳答案

按照我的评论编辑了您的代码。在您的情况下,对 userPaintingRelation 的解析调用是一个后台线程,将在后台执行,而 Paintings 查询在执行后台查询之前执行。

var paintingArray: [AnyObject] = []

// Define the query that will provide the data for the table view
override func queryForTable() -> Void {

//Find User Painting Relations to display
var relationQuery = PFQuery(className:"UserPaintingRelation")
relationQuery.whereKey("userID", equalTo:PFUser.currentUser()!)

relationQuery.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]?, error: NSError?) -> Void in

if error == nil {
// The find succeeded.
// Do something with the found objects
if let objects = objects as? [PFObject] {
for object in objects {
println(object.objectId)

//Add the paintingID of the current object to array
var paintingObjectId: AnyObject? = object["paintingID"]!.objectId
var paintingObjectIdString:String = paintingObjectId as! String
self.paintingArray.append(paintingObjectIdString)
}
//Query that loads relevant Painting objects
var query = PFQuery(className: "Painting")
//Make sure only the objects that are referenced in the paintingArray are loaded
query.whereKey("objectId", containedIn: self.paintingArray)
var: tableArray = query.findObjects() as [PFObject] //array for datasource of table
yourTableView.reloadData()
}
} else {
// Log details of the failure
println("Error: \(error!) \(error!.userInfo!)")
}

}
}

关于ios - 使用其他解析查询的结果过滤解析查询不起作用 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31491315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com