我想将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”,它是整数
答案 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()
}