我已经创建了一个函数,通过在UI上点击收藏夹按钮,在解析中创建一个“收藏”对象:
//MARK: Create the favorite object
func createFavorite(){
let currentUser = PFUser.currentUser()
let currentBook = PFObject(withoutDataWithClassName: "Books", objectId: objectIdSelected)
let favorite = PFObject(className:"Favorites")
favorite["user"] = currentUser
favorite["books"] = currentBook
favorite.saveInBackgroundWithBlock {
(success: Bool, error: NSError?) -> Void in
if (success) {
// success
} else {
// There was a problem, check error.description
}
}
}
现在我正在尝试创建一个查询,使用以下逻辑检查是否存在具有这些确切属性的收藏对象,我将它放在显示特定书籍的VC的viewDidLoad中:
//MARK: Check if there is a favorite object available
func isFavoritedByUser(){
let currentUser = PFUser.currentUser()
let currentBook = PFObject(withoutDataWithClassName: "Books", objectId: objectIdSelected)
let query = PFQuery(className:"Favorites")
query.whereKey("user", equalTo: currentUser!)
query.whereKey("books", equalTo: currentBook)
query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
if objects != nil {
print("this book was favorited by this user")
} else if objects == nil {
print("this book WAS NOT favorited by this user")
} else if error == nil {
// succeed
} else if error != nil {
// There was a problem, check error.description
}
}
}
但是,即使我的解析类中没有存在具有这些属性的喜欢对象,它仍然会打印“这本书被这个用户收藏”..我在这里缺少什么?
答案 0 :(得分:0)
现有的清单不是证据。这简单地证明了没有观察到某种错误。
您应首先检查没有错误,然后检查对象列表中是否有一个项目。
如果该列表包含多个项目,那么您将创建重复项,并且您应该修复该项...
答案 1 :(得分:0)
只要没有错误,您返回的是一个数组。因此,不应检查nil,而应检查返回数组的内容( objects )以查看其中是否有任何内容。
在Parse的指南中,您可以看到他们为此函数调用推荐的内容: https://parse.com/docs/ios/guide#queries
此外,Parse建议考虑使用getFirstObjectInBackground,如果此查询只需要返回单个对象,那么可能需要考虑作为替代方法。
答案 2 :(得分:0)
所以问题是我正在检查object
是否为nil而不是检查计数,这是正确的代码:
//MARK: Check if there is a favorite object available
func isFavoritedByUser(){
let currentUser = PFUser.currentUser()
let currentBook = PFObject(withoutDataWithClassName: "Books", objectId: objectIdSelected)
let query = PFQuery(className:"Favorites")
query.whereKey("user", equalTo: currentUser!)
query.whereKey("books", equalTo: currentBook)
query.findObjectsInBackgroundWithBlock { (object, error) -> Void in
if error == nil {
if object?.count > 0{
print("this book was favorited by this user")
} else {
print("this book WAS NOT favorited by this user")
}
} else {
}
}
}
答案 3 :(得分:0)
对于iOS,您可以像这样检查对象上的字典:
div{
max-width: 200px;
height: auto;
}
如果存在,则将获得指针。如果没有/您没有查询要包含指针,那么它将只返回nil。