我想将CoreData中的数据显示到表格视图中

时间:2019-12-18 12:55:03

标签: swift core-data

我想将CoreData中的数据显示到一个表视图中,我正在处理收藏夹,我在我的收藏夹上添加了事件,并且想要在表视图中显示它,这是我的代码:

   var lists : [NSManagedObject] = [] {
     didSet {
           favorisEventTableView.reloadData()
       }
    }
    @IBOutlet weak var favorisEventTableView: UITableView!

    override func viewDidLoad() {
          super.viewDidLoad()
        favorisEventTableView.dataSource = self
             favorisEventTableView.delegate = self
             loadFavoris()
          // Do any additional setup after loading the view.
      }

    override func viewWillAppear(_ animated: Bool) {
         favorisEventTableView.reloadData()
    }

    func numberOfSections(in tableView: UITableView) -> Int {
                        return 1

    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return lists.count

    }


    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = favorisEventTableView.dequeueReusableCell(withIdentifier: "FavorisCell")
               let contentView = cell?.viewWithTag(0)
               let eventId = contentView?.viewWithTag(4) as! UILabel     
                  let item = lists[indexPath.row]

        eventId.text = String((item.value(forKey: "id_event") as! Int))

        return cell!
    }

    func loadFavoris() {
         let appDelegate = UIApplication.shared.delegate as? AppDelegate
         let coreContext = appDelegate?.persistentContainer.viewContext
         let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Favoris")
         do {
             lists = try coreContext!.fetch(fetchRequest)
            print(lists)
         } catch let error as NSError {
             print(error.userInfo)
         }
     }

但是它什么也没显示,也许是add函数的问题?我确定它可以正常工作,因为我在控制台上被“保存”了,有什么帮助吗? PS:实体“ Favoris”只有一个属性“ id_event”,它是整数

2 个答案:

答案 0 :(得分:0)

您需要在loadFavoris而不是viewDidLoad内添加cellForRowAt

override func viewDidLoad() {
      super.viewDidLoad()
      favorisEventTableView.dataSource = self
      favorisEventTableView.delegate = self
      loadFavoris()
}

答案 1 :(得分:-1)

您需要重新加载表格视图,以便对列表进行每次更改。你可以那样做

var lists : [NSManagedObject] = [] {
 didSet {
       tableView.reloadData()
   }
}

别忘了分配tableView的委托和dataSource协议并在viewDidLoad()函数中获取数据

override func viewDidLoad() {
      super.viewDidLoad()
      tableView.delegate = self
      tableView.dataSource = self
      loadFavoris()
}