Ios 如何使用swift正确检查解析中的现有对象
我制作了一个函数,通过点击UI上的favorite按钮,在解析中创建一个“favorite”对象:Ios 如何使用swift正确检查解析中的现有对象,ios,arrays,swift,object,parse-platform,Ios,Arrays,Swift,Object,Parse Platform,我制作了一个函数,通过点击UI上的favorite按钮,在解析中创建一个“favorite”对象: //MARK: Create the favorite object func createFavorite(){ let currentUser = PFUser.currentUser() let currentBook = PFObject(withoutDataWithClassName: "Books", objectId: objectIdSel
//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
}
}
}
然而,即使在我的解析类中不存在具有这些属性的常用对象,它仍然打印“这本书是这个用户喜欢的”。。我在这里遗漏了什么?现有的列表不是证据。这仅仅证明了没有观察到某种错误 您应该首先检查是否没有错误,然后检查对象列表中是否有一项
如果列表中有多个项,则您正在创建重复项,并且您应该修复…现有列表不是证明。这仅仅证明了没有观察到某种错误 您应该首先检查是否没有错误,然后检查对象列表中是否有一项
如果列表中有多个项,则您正在创建重复项,并且您应该修复…只要没有错误,您将返回的是一个数组。因此,与其检查nil,不如检查返回数组(对象)的内容以查看其中是否有任何内容 在Parse的指南中,您可以看到他们对此函数调用的建议:
另外,如果这个查询只需要返回一个对象,那么PARSE建议考虑GETFIDSObjutsBuffic,因此这可能是一个可以考虑的备选方案。
只要返回一个数组,只要没有错误就可以返回一个数组。因此,与其检查nil,不如检查返回数组(对象)的内容以查看其中是否有任何内容
在Parse的指南中,您可以看到他们对此函数调用的建议:另外,如果该查询只需要返回一个对象,那么解析就建议考虑GETFIDSObjutsBuffic,因此这可能是另一个可以考虑的问题。
< P>因此,问题是,我正在检查代码< >对象< /代码>是否是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 {
}
}
}
所以问题是我在检查
object
是否为零,而不是检查计数,下面是正确的代码:
//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 {
}
}
}
对于iOS,您只需在如下对象上检查字典:
rideParse["driver"] == nil
如果它存在,那么您将获得指针。如果它没有/您没有查询包含指针,那么它将只返回nil。对于iOS,您可以在如下对象上检查字典:
rideParse["driver"] == nil
如果它存在,那么您将获得指针。如果它没有/您没有查询包含指针,那么它只会返回nil。您最好先检查错误,然后将
If object!=如果错误==nil
,则在中为nil
。当您试图从用户类获取数据时,应使用_用户查询,PFUser.query
。然后,在用户类中查询特定用户列中的数据。“favorites”是你的用户类中的一列吗?不,你看,favorites是一个类&“user”是指向\u user
@MikeGi之前做过的,但我认为它只是检查是否没有发生错误,而不是导致问题的内部else语句@Trick14你最好先检查错误,然后放入if object!=如果错误==nil
,则在中为nil
。当您试图从用户类获取数据时,应使用_用户查询,PFUser.query
。然后,在用户类中查询特定用户列中的数据。“favorites”是你的用户类中的一列吗?不,你看,favorites是一个类&“user”是指向\u user
@MikeGi之前做过这件事,但我认为它只是检查是否没有发生错误,而不是导致问题的内部else语句@trick14