Swift 我想将CoreData中的数据显示到tableview中
我想将CoreData中的数据显示在tableview中,我在favoris上工作,我在favoris上添加我的事件,我想将其显示在tableview中,我的代码如下:Swift 我想将CoreData中的数据显示到tableview中,swift,core-data,Swift,Core Data,我想将CoreData中的数据显示在tableview中,我在favoris上工作,我在favoris上添加我的事件,我想将其显示在tableview中,我的代码如下: var lists : [NSManagedObject] = [] { didSet { favorisEventTableView.reloadData() } } @IBOutlet weak var favorisEventTableView: UITa
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)
}
}
var列表:[NSManagedObject]=[]{
迪塞特{
favorisEventTableView.reloadData()
}
}
@IBVAR FavoriteEventTableView:UITableView!
重写func viewDidLoad(){
super.viewDidLoad()
favorisEventTableView.dataSource=self
favorisEventTableView.delegate=self
loadFavoris()
//加载视图后执行任何其他设置。
}
覆盖函数视图将出现(uo动画:Bool){
favorisEventTableView.reloadData()
}
func numberOfSections(在tableView:UITableView中)->Int{
返回1
}
func tableView(tableView:UITableView,numberofrowsinssection:Int)->Int{
返回列表。计数
}
func tableView(tableView:UITableView,cellForRowAt indexath:indexPath)->UITableViewCell{
let cell=favorisEventTableView.dequeueReusableCell(标识符为“FavorisCell”)
让contentView=单元格?.viewWithTag(0)
让eventId=contentView?.viewWithTag(4)作为!UILabel
let item=列表[indexPath.row]
eventId.text=String((item.value(forKey:“id_事件”)as!Int))
返回单元!
}
func loadFavoris(){
将appDelegate=UIApplication.shared.delegate设为appDelegate
让coreContext=appDelegate?.persistentContainer.viewContext
let fetchRequest=NSFetchRequest(entityName:“Favoris”)
做{
lists=尝试coreContext!.fetch(fetchRequest)
打印(列表)
}将let错误捕获为NSError{
打印(错误:userInfo)
}
}
但是它没有显示任何内容,可能是add函数的问题?我确信它能工作,因为我在控制台上被“保存”,有什么帮助吗?
PS:实体“Favoris”只有一个属性“id_event”,它是一个整数您需要在
viewDidLoad
内部添加loadFavoris
非cellForRowAt
override func viewDidLoad() {
super.viewDidLoad()
favorisEventTableView.dataSource = self
favorisEventTableView.delegate = self
loadFavoris()
}
每次更改列表时,都需要重新加载表视图。你可以这样做
var lists : [NSManagedObject] = [] {
didSet {
tableView.reloadData()
}
}
不要忘记分配tableView的委托和数据源协议,并在viewDidLoad()函数中获取数据
谢谢,它可以工作,但当我向favoris添加事件时,我必须重新打开应用程序才能将其放入tableview中,我是否需要有关实体“favoris”的更新函数?您可以调用`loadFavoris()`inside
ViewDidDisplay
我需要重新加载tableview上的数据以保存最新的添加或删除,因为当我向favoris添加事件时,它在我运行应用程序时没有出现,我需要重新打开应用程序,以查看另一个控制器中TableView的最后更改,并且它工作正常,但是我需要在tableview上重新加载数据以保存最新的添加或删除。您应该使用NSFetchedResultsController
或UITableView
的专用API,该API插入和删除具有漂亮动画的行。它不起作用,并且我在let id=(项目值(forKey:“id_事件”)为!Int)
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
loadFavoris()
}