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

时间:2016-01-25 20:27:15

标签: ios arrays swift object parse-platform

我已经创建了一个函数,通过在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
            }
        }
    }

但是,即使我的解析类中没有存在具有这些属性的喜欢对象,它仍然会打印“这本书被这个用户收藏”..我在这里缺少什么?

4 个答案:

答案 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。