混淆自己将核心数据中的数据提取到两个不同的视图控制器

时间:2017-06-17 13:21:46

标签: ios iphone swift xcode core-data

我是Core Data的新手,并且认为我可能会让自己的事情变得比需要的更难,因为我似乎在View Controllers中重复代码。我已成功设法使用以下代码填充包含核心数据条目的表:

import UIKit
import CoreData

class ClientListViewController: UIViewController, UITabBarDelegate, UITableViewDataSource {

    var clientItems : [Client] = []

    @available(iOS 2.0, *)
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return clientItems.count
    }

    @available(iOS 2.0, *)
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as UITableViewCell
        let items = clientItems[indexPath.row]

        cell.textLabel?.text = items.name
        cell.accessoryType = UITableViewCellAccessoryType.disclosureIndicator

        return cell
    }

    func getData() {

        let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

        do {
        clientItems = try context.fetch(Client.fetchRequest())
        } catch {
            print("Fetch Failed")

        }
    }

    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
         let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

        if editingStyle == .delete {
            let item = clientItems[indexPath.row]
            context.delete(item)
            (UIApplication.shared.delegate as! AppDelegate).saveContext()

            do {
                clientItems = try context.fetch(Client.fetchRequest())
            } catch {
                print("Fetch Failed")

            }
        }
        tableView.reloadData()
    }

    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        navigationController?.navigationBar.prefersLargeTitles = true
    }

    override func viewWillAppear(_ animated: Bool) {
        getData()

        tableView.reloadData()
    }

}

此代码按预期显示表中的客户端名称,但是当我单击该单元格时,我希望它加载我的新视图,显示在核心数据中为它们存储的所有客户端信息。首先,我希望导航栏标题是从前一个View Controller上的单元格中点击的人员名称,但我的代码始终显示第一个条目,因为我说[0]如何提供的数据来自实际行在另一个View Controller的表格中选择。

我很困惑,似乎在这个过程中重复不必要的代码。这是我的第二个View Controllers代码:

import UIKit
import CoreData

class ClientViewController: UIViewController {

    var clientItems : [Client] = []

    @IBOutlet weak var nameLabel: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.

        getData()
        navigationItem.title = String(describing: clientItems[0].name!)
        print(clientItems[0].name!)

    }

    func getData() {

        let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

        do {
            clientItems = try context.fetch(Client.fetchRequest())
        } catch {
            print("Fetch Failed")

        }
    }

}

0 个答案:

没有答案