2017-08-06 2 views
0

Je tire des données de Parse dans un tableau, mais ont besoin d'un moyen de référencer cet objet spécifique directement pour apporter des modifications aux données sur le serveur (ex: suppression de une entrée spécifique l'application et l'avoir supprimer sur le serveur). Auparavant, j'utilisais un tableau rempli d'un fichier PFQuery, qui fonctionnait pour extraire les données mais pas pour les sauvegarder. Je pense que la création d'un dictionnaire avec [objectID: chaîne de données nécessaire] fonctionnerait, de sorte que chaque ensemble de données actuellement dans le tableau serait toujours couplé directement à son identifiant. Mon problème est de tirer vers le bas les deux ensembles de données (objectID et chaîne de données) et de les faire correspondre dans le dictionnaire. Des conseils ou de l'aide?dictionnaire de charge avec objectID et les données de Parse à Swift

J'ai changé le tableau original à un dictionnaire dans la variable cellContent mais sinon le code est encore mis en place pour un tableau.

Merci!

import UIKit 
import Parse 

var segueWorker = "" 

class MyWorkersViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

    var cellContent = [String: String]() 


    @IBAction func backButton(_ sender: Any) { 

     navigationController?.popViewController(animated: true) 

     performSegue(withIdentifier: "workersToMyFarm", sender: self) 

    } 

    @IBOutlet weak var tableView: UITableView! 


    internal func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

     return cellContent.count 

    } 




    internal func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

     let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "Cell") 

     cell.textLabel?.text = cellContent[indexPath.row] 

     return cell 

    } 

    override func viewDidAppear(_ animated: Bool) { 


     // Do any additional setup after loading the view. 

     self.cellContent.removeAll() 

     let query = PFQuery(className: "Workers") 

     query.findObjectsInBackground(block: { (objects1, error) in 

      if error != nil { 

       print(error!) 

      } else { 

       query.whereKey("username", equalTo: PFUser.current()?.username) 

       query.findObjectsInBackground(block: { (objects2, error) in 

        for object in objects2! { 

         self.cellContent.append(object["workerName"] as! String) 

         self.cellContent.sort() 

         self.tableView.reloadData() 

         } 

        } 

       )} 

      } 

     )} 

    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 

     if editingStyle == UITableViewCellEditingStyle.delete { 

      cellContent.remove(at: indexPath.row) 

      tableView.reloadData() 


     } 




    } 

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

     let indexPath = tableView.indexPathForSelectedRow 

     let currentCell = tableView.cellForRow(at: indexPath!)! 

     segueWorker = (currentCell.textLabel!.text!) 

     performSegue(withIdentifier: "toAddWorkers", sender: self) 

    } 



    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


} 

Répondre

0

A pris un peu bricoler mais finalement eu à travailler en étalant les variables et enfin construire le dictionnaire une fois que j'avais toutes les variables créées. De plus, il a eu beaucoup de difficulté à obtenir l'objectId de Parse mais semble fonctionner en appelant simplement object.objectId.

code ci-dessous pour référence:

self.cellContent.removeAll() 

let query = PFQuery(className: "Workers") 

query.findObjectsInBackground(block: { (objects1, error) in 

    if error != nil { 

     print(error!) 

    } else { 

       query.whereKey("username", equalTo: PFUser.current()?.username) 

       query.findObjectsInBackground(block: { (objects2, error) in 

        for object in objects2! { 

         self.cellContent.append(object["workerName"] as! String) 


         // Needs to be objectId 

         let objectKey = object.objectId 

         let objectValue = object["workerName"] as! String 

         self.cellContentDict[objectKey!] = objectValue 

         print(self.cellContentDict) 

         self.cellContent.sort() 

       self.tableView.reloadData()