2016-01-22 32 views
1

我使用PFQueryTableViewController從Parse.com後端檢索圖像。稍後,我想爲快速掃描的行圖像拍攝快照(使用editActionsForRowAtIndexPath)。使用Parse.com中的editActionsForRowAtIndexPath提取行數據PFQueryTableViewController

此時,我可以使用editActionsForRowAtIndexPath檢索對象並在行上創建一個動作。該操作將retrivedObject通過prepareForSegue方法傳遞給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 
} 
+0

顯示索引路徑和圖像處理行的其餘單元格 – Wain

+0

@Wain剛剛編輯我的問題。請看看。 –

回答

0

的問題是你的retrivedObject使用。通過設置retrivedObject = object它始終設置爲顯示的最後一個對象(單元格)。它與用戶選擇無關。

當您創建共享動作,你應該設置

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

這樣在prepareForSegue功能,您可以使用index(這是sender),以獲得真正的選擇對象。

+0

我剛查過。它仍然顯示我隨機圖像。有一段時間它會顯示正確的圖像,有時它不會。還有什麼我在這裏失蹤? –

+0

檢查您收到的索引,是否與您點擊的索引相同? – Wain

+0

是的。這是相同的。你認爲有些東西與解析檢索圖像有關嗎?或者有沒有一種方法可以只取得選中的單元而不是使用retrivedObjects。我只是打印了retrieveObject,可以看到它有不同於我選擇的圖像。 –