Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 我想将CoreData中的数据显示到tableview中_Swift_Core Data - Fatal编程技术网

Swift 我想将CoreData中的数据显示到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

我想将CoreData中的数据显示在tableview中,我在favoris上工作,我在favoris上添加我的事件,我想将其显示在tableview中,我的代码如下:

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