替换解析中的对象

Replacing Object In Parse

我正在尝试删除 Parse 中保存的对象并替换它。我的代码不工作。我的解析数据库只添加具有相同数组名称的对象。这是我的代码......

 @IBAction func finalSaveBTN(sender: AnyObject)
    {
        videoARY = [videoId, vidTitleText, vidDescription, vidIMG]
        let videoSave = PFObject(className: "UserVideos")
        videoSave.deleteInBackgroundWithBlock { (success, error) -> Void in
            if success == true
            {
                videoSave["userObjectId"] = PFUser.currentUser()!.objectId
                videoSave["vid\(self.saveValueLBL.text!)"] = self.videoARY
                videoSave.saveInBackgroundWithBlock { (success, error ) -> Void in
                    if success == true
                    {
                        print("Succesfull")
                    }
                }
            }
            else
            {
                print("Error")
            }
        }
    }

我想删除该对象,但如果有人知道如何成功更新 Parse 数组,那也会有所帮助。谢谢。

*** 更新 ****

我正在尝试这个,也没有用,可能是哪里出了问题....

@IBAction func finalSaveBTN(sender: AnyObject)
    {
        videoARY = [videoId, vidTitleText, vidDescription, vidIMG]
        let videoSave = PFObject(className: "UserVideos")
        let query = PFQuery(className: "UserVideos")
        query.whereKey("userObjectId", equalTo: PFUser.currentUser()!.objectId!)
        query.findObjectsInBackgroundWithBlock {
            (objects: [AnyObject]?, error: NSError?) -> Void in
            for object in objects!
            {
                let vid = object["vid\(self.saveValueLBL.text!)"]!
                vid!.delete()
            }

        }
        videoSave["userObjectId"] = PFUser.currentUser()!.objectId
        videoSave["vid\(self.saveValueLBL.text!)"] = self.videoARY
        videoSave.saveInBackgroundWithBlock { (success, error ) -> Void in
            if success == true
            {
                print("Succesful")
            }
        }
    }

**** 更新 ***** 我正在删除 videoSave 的所有视频。如果您对如何定位特定阵列有任何建议,我将不胜感激。我会尝试返工并简单地保存为 PFFile

@IBAction func finalSaveBTN(sender: AnyObject)
    {

            videoARY = [videoId, vidTitleText, vidDescription, vidIMG]
            let videoSave = PFObject(className: "UserVideos")
            let query = PFQuery(className: "UserVideos")
            query.whereKey("userObjectId", equalTo: PFUser.currentUser()!.objectId!)
            query.findObjectsInBackgroundWithBlock {
                (objects: [AnyObject]?, error: NSError?) -> Void in
                for object in objects!
                {
                    if let vid = object["vid\(self.saveValueLBL.text!)"]!
                    {
                    vid.deleteInBackground()
                    vid.saveInBackground()
                    }
                }

            }
            videoSave["userObjectId"] = PFUser.currentUser()!.objectId
            videoSave["vid\(self.saveValueLBL.text!)"] = self.videoARY
            videoSave.saveInBackgroundWithBlock { (success, error ) -> Void in
                if success == true
                {
                    print("Succesful")
                }
            }

这里有一些障碍,让我带你克服它们。

1:

let videoSave = PFObject(className: "UserVideos")
videoSave.deleteInBackgroundWithBlock {...}

第一个问题是您正在尝试删除您正在创建的全新对象,该对象尚未保存到服务器。这就是 let ... = PFObject(className:...) 所做的,它创建了一个新对象。

2:更新解析数组真的很简单!如果您的代码中有该对象,您只需使用 或 之类的函数更改您的对象,然后使用 .saveInBackgroundWithBlock,瞧!如果你没有这个对象,你需要先创建一个没有服务器数据的对象版本,然后让它从你的解析服务器获取它的信息,然后你可以修改并保存它。这是你如何做这两件事

    PFObject(withoutDataWithObjectId: objectId)
    PFObject().fetchIfNeededInBackgroundWithBlock({})

最后,如果您没有对象的 objectId,则必须使用 PFQuery 找到它,然后使用 .whereKey(...) 进行过滤直到找到。

3:您是否知道通过调用 videoSave["vid\(self.saveValueLBL.text!)"] = self.videoARY,您将保存到解析服务器中名为 vid+ 字符串 self.saveValueLBL.text! 的列中?您可能会即时创建解析列。请注意!

4:另一个问题是 videoSave["vid\(self.saveValueLBL.text!)"] = self.videoARY 行。您不能保存 PFFile 数组。您必须将该信息保存在单独的列中,指定类型为 PFFile.

5:在您的新代码块中,我认为 delete() 并不像您认为的那样工作。如果你想删除整个对象,使用object.deleteInBackground(),如果你只想删除那个对象的一个​​属性,你可以使用object.removeObjectForKey(...),然后object.saveInBackground()

这一切有意义吗?

我不必将数组转换为 PFFile。我只需要添加第二个查询。基本上我是在查询当前用户的所有视频。添加 query.whereKeyExists 将其缩小到特定视频。它还将使我的检索查询更容易。在这里.......

@IBAction func finalSaveBTN(sender: AnyObject)
    {

        videoARY = [videoId, vidTitleText, vidDescription, vidIMG]
        let query = PFQuery(className: "UserVideos")
        query.whereKey("userObjectId", equalTo: PFUser.currentUser()!.objectId!)
        query.whereKeyExists("vid\(self.saveValueLBL.text!)")
        query.findObjectsInBackgroundWithBlock {
            (objects: [AnyObject]?, error: NSError?) -> Void in
            for object in objects!
            {
                object.deleteInBackground()
                object.saveInBackground()
            }
        }

        let videoSave = PFObject(className: "UserVideos")
        videoSave.setObject(self.videoARY, forKey: "vid\(self.saveValueLBL.text!)")
        videoSave["userObjectId"] = PFUser.currentUser()!.objectId
        videoSave.saveInBackgroundWithBlock { (success, error ) -> Void in
            if success == true
            {
                print("Succesful")
            }
        }
    }