使用canEditRowAtIndexPath从解析中删除图像

时间:2015-07-01 08:16:00

标签: ios swift uitableview parse-platform

我目前正在使用swift(解析)编写类似于instagram的小项目。用户发布图像后,上传到解析,我将其检索到tableview。由于图像需要转换为NSData和PFFile,因此将其保存为PFFile。我试图通过canEditRowAtIndexPath使用objectToDelete.deleteInBackgroundWithBlock从表格视图中删除解析文件。但是根据我的研究,我发现PFFile不能从用户中删除,只能删除对象。但是图像文件对于对象来说太大了。 (我希望我是对的)。我想知道在用户不想看到它或删除帖子后如何使它不显示在表格视图中。

更新

 func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
        return true
    }
    func tableView(tableView: UITableView!, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath!) {
        println("Commit Editing Style \(editingStyle)")
    }

func tableView(tableView: UITableView!, editActionsForRowAtIndexPath indexPath: NSIndexPath!) -> [AnyObject]! {



    var deleteAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "Delete", handler: {
        (action: UITableViewRowAction!, indexPath: NSIndexPath!) in
        println("Triggered delete action \(action) atIndexPath: \(indexPath)")
        return
    })

    return [deleteAction]
}


    func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
        if editingStyle == .Delete {


            var fileName = "uploaded_image.png"
            let applicationID = "appidwritten"
            let masterKey = "masterkeywritten"

            let request = NSMutableURLRequest(URL: NSURL(string: "https://api.parse.com/1/files/\(fileName)")!)
            request.HTTPMethod = "DELETE"
            request.setValue(applicationID, forHTTPHeaderField: "X-Parse-Application-Id")
            request.setValue(masterKey, forHTTPHeaderField: "X-Parse-Master-Key")
            NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in
    println(response)
            }).resume()

}


}

谢谢

1 个答案:

答案 0 :(得分:0)

您无法通过deleteInBackgroundWithBlock删除文件:

  

为什么我不能使用SDK删除文件?

     

由于文件没有ACL,因此不能将其写访问权限限制为特定用户。由于任何用户都不打开文件删除文件并不是一个很好的安全措施,因此我们要求使用主密钥删除文件。由于客户端SDK无法使用主密钥,因此您需要使用REST API。

     

https://parse.com/questions/how-can-i-delete-a-file

所以你应该通过REST API删除一个文件,如下所示:

var fileName = ""
let applicationID = ""
let masterKey = ""

let request = NSMutableURLRequest(URL: NSURL(string: "https://api.parse.com/1/files/\(fileName)")!)
request.HTTPMethod = "DELETE"
request.setValue(applicationID, forHTTPHeaderField: "X-Parse-Application-Id")
request.setValue(masterKey, forHTTPHeaderField: "X-Parse-Master-Key")
NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in
    println(response)
}).resume()

文件名必须是上传操作响应中的名称,而不是原始文件名。