【问题标题】:Extract row data using editActionsForRowAtIndexPath from Parse.com PFQueryTableViewController使用 Parse.com PFQueryTableViewController 中的 editActionsForRowAtIndexPath 提取行数据
【发布时间】:2016-01-22 07:34:39
【问题描述】:

我正在使用 PFQueryTableViewController 从 Parse.com 后端检索图像。稍后,我想对刷过的行图像进行快照(使用editActionsForRowAtIndexPath)。

此时,我可以使用editActionsForRowAtIndexPath 检索对象并在行上创建操作。该操作通过prepareForSegue 方法将retrivedObject 传递给ShareViewController。一旦我在 ShareViewController 上,我可以看到一张图片,但它与我使用editActionsForRowAtIndexPath 单击分享的不同。它是上面或下面的图像,或者有时与我单击的图像相同。

谁能帮我解决这个问题?

我的代码如下:

PFQueryTableViewController

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell {
            var cell = tableView.dequeueReusableCellWithIdentifier("cell") as! DataViewTableViewCell!
    if cell == nil {
        cell = DataViewTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cell")
    }
    retrivedObject =  object

    // Display profile image
    let profileThumbnail = UIImage(named: "DProfilePicture")
    cell.profilePicture.image = profileThumbnail

    if let thumbnail = object?["profilePicture"] as? PFFile {
        cell.profilePicture.file = thumbnail
        cell.profilePicture.loadInBackground()
    }

    // Display main image
    let initialThumbnail = UIImage(named: "DefaultImage")
    cell.picture.image = initialThumbnail

    if let thumbnail = object?["picture"] as? PFFile {
        cell.picture.file = thumbnail
        cell.picture.loadInBackground()  
    }

    //........
}

   override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {
    print("EDIT MODE INDEX: \(indexPath.item)")

    let Share = UITableViewRowAction(style: .Normal, title: "Share") { action, index in
        print("Share button tapped")
        self.performSegueWithIdentifier("ShareImage", sender: self)   
    }
    Share.backgroundColor = UIColor.blackColor()
    return [Share]
}


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if segue.destinationViewController is ShareViewController {
        let vc = segue.destinationViewController as! ShareViewController
        vc.selectedObject = retrivedObject
    }
}

ShareViewController

var selectedObject: PFObject!
var sharedImage: UIImage!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
}

override func viewDidAppear(animated: Bool) {
    if selectedObject == nil {
        return
    }

   if let file = selectedObject["picture"] as? PFFile {
                file.getDataInBackgroundWithBlock({ (data, error) -> Void in
                    if data != nil {
                self.sharedPicture.image = UIImage(data: data!)
                self.screenShotMethod()
             }
          })
       }
    }

@IBAction func cancelBtn(sender: AnyObject) {
   self.dismissViewControllerAnimated(true, completion: nil)
}

@IBAction func shareBtn(sender: AnyObject) {
    let vc = SLComposeViewController(forServiceType: SLServiceTypeFacebook)
    vc.setInitialText("Look at this great picture!")
    vc.addImage(sharedImage)
    self.presentViewController(vc, animated: true, completion: nil)
}

func screenShotMethod() -> UIImage {
    //Create the UIImage
    UIGraphicsBeginImageContextWithOptions(self.shareView.frame.size, true, 2.0 )
    self.shareView.drawViewHierarchyInRect(CGRect(x: 0, y: 0, width: self.shareView.bounds.width, height: self.shareView.bounds.height), afterScreenUpdates: false)
    view.layer.renderInContext(UIGraphicsGetCurrentContext()!)
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    sharedImage = image
    return sharedImage
}

【问题讨论】:

  • 在索引路径和图像处理中显示单元格的其余部分
  • @Wain 刚刚编辑了我的问题。请看一看。

标签: ios swift parse-platform pfquerytableviewcontrolle


【解决方案1】:

问题在于您使用了retrivedObject。通过设置retrivedObject = object,它始终设置为显示的最后一个对象(单元格)。与用户选择无关。

当你创建分享动作时你应该设置

self.performSegueWithIdentifier("ShareImage", sender: index) 

这样在prepareForSegue 函数中,您可以使用index(即sender)来获取真正的选定对象。

【讨论】:

  • 我刚刚检查过了。它仍然向我显示随机图像。有时它会显示正确的图像,有时它不会。我这里还有什么遗漏的吗?
  • 检查你收到的索引,和你点击的索引一样吗?
  • 是的。这是相同的。您是否认为与如何解析检索到的图像有关?或者有没有一种方法可以只获取选定的单元格而不是使用 retrivedObjects。我刚刚打印了检索到的对象,可以看到它的图像与我选择的不同。
  • 你现在应该已经删除了retrivedObject,这是问题所在。按照我的回答改用索引
  • 对不起,如果我删除了retrivedObject,我将如何获取数据?无论如何,我尝试删除 retrivedObject。现在我在下一个 viewController 上得到一个空白屏幕。如果我错了,请纠正我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多