使用objectID加载字典,使用Swift中的Parse加载数据

时间:2017-08-06 17:20:19

标签: arrays swift dictionary parse-platform

我将数据从Parse拖入数组但需要一种方法直接引用该特定对象以更改服务器上的数据(例如:删除应用程序中的特定条目并在服务器上删除它) 。以前我使用的是一个填充了PFQuery的数组,它可以用来提取数据但不用于备份更改。我认为使用[objectID:所需数据字符串]创建字典会起作用,因此数组中当前的每个数据集将始终直接与其标识符配对。我的问题是将两组数据都拉下来(objectID和数据字符串)并在字典中将它们匹配起来。有什么建议或帮助吗?

我将原始数组更改为cellContent变量中的字典,但是仍然为数组设置了代码。

谢谢!

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.
    }


}

1 个答案:

答案 0 :(得分:0)

进行了一些修改,但最终通过展开变量并最终在创建了所有变量后构建字典来使其工作。另外,从Parse获取objectId有很多麻烦,但似乎只是调用object.objectId。

以下代码供参考:

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()