Ios 如何使用swift正确检查解析中的现有对象

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

我制作了一个函数,通过点击UI上的favorite按钮,在解析中创建一个“favorite”对象:

//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