2016-01-22 3 views
1

Я использую PFQueryTableViewController для извлечения изображений из бэкэнд Parse.com. Позже, я хочу сделать снимок прореженного изображения строки (используя editActionsForRowAtIndexPath).Извлечь данные строки с помощью editActionsForRowAtIndexPath из Parse.com 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. Я просто напечатал retrievedObject и вижу, что у него другое изображение, чем тот, который я выбрал. –

 Смежные вопросы

  • Нет связанных вопросов^_^