UICollectionView 中的重载数据

Posted

技术标签:

【中文标题】UICollectionView 中的重载数据【英文标题】:ReloadData in UICollectionView 【发布时间】:2016-08-22 16:18:21 【问题描述】:

我使用 CoreData 并希望在 CoreData 中保存新条目时重新加载 UICollectionView,但唯一的 self.collectionview.reloaddata()don´t 运行它不会重新加载任何内容。

感谢您的帮助。

我的 CoreData 和 UICollectionView 我已经尝试在 clockblogalarm 成为新条目时重新加载 UICollectionView:

var clockblogalarm = [ClockBlogAlarm] () 
    didSet               //self.ClockCollectionView.reloadData()
    



var mgdContext = (UIApplication.shared.delegate as! AppDelegate).managedObjectContext


func loadClockAlarms () 
    let LoadRequestBlogAlarm: NSFetchRequest<ClockBlogAlarm> = ClockBlogAlarm.fetchRequest()
    clockblogalarm = try! mgdContext.fetch(LoadRequestBlogAlarm as! NSFetchRequest<NSFetchRequestResult>) as! [ClockBlogAlarm]




@IBOutlet var ClockCollectionView: UICollectionView!


override func viewWillAppear(_ animated: Bool) 
    super.viewWillAppear(animated)    
    self.loadClockAlarms()  

这里我将条目保存在 CoreData 中。当我单击按钮 Done view.bottomButtonHandler 时,我想重新加载数据并使用 loadClockAlarms() 在 UICollectionView 中显示它。

else if index == 1 

        let view = AddClockView.instantiateFromNib()
        let window = UIApplication.shared.delegate?.window!
        view.closeButtonHandler = [weak modal] in
            modal?.closeWithLeansRandom()
            return
        
        view.bottomButtonHandler = [weak modal] in
            modal?.closeWithLeansRandom()

            self.loadClockAlarms()


            return
        

        modal.show(modalView: view, inView: window!)

    






// MARK: UICollectionViewDataSource



override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    return clockblogalarm.count




override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "AlarmBlogCell", for: indexPath) as! AlarmBlogCell

    cell.layer.cornerRadius = 8



    let clockblogalarms = clockblogalarm[indexPath.row]


    if clockblogalarms.lock == "ClockblogAlarm" 

        cell.Title.text = clockblogalarms.title
        cell.Time.text = "SSSSS"

    




    return cell

【问题讨论】:

你能在你的UICollectionViewDataSource方法中展示你有什么吗? 是的,我已经添加了。 【参考方案1】:

Swift 5 和 4.2:

 DispatchQueue.main.async 
  self.collectionView.reloadData()
 

【讨论】:

【参考方案2】:

确保在主线程中调用 reloadData(),因为它是 UI 负责的操作:

dispatch_async(dispatch_get_main_queue()) 
    self.ClockCollectionView.reloadData()

【讨论】:

谢谢它运行。

以上是关于UICollectionView 中的重载数据的主要内容,如果未能解决你的问题,请参考以下文章

如何从JSON加载特定数据并显示UICollectionView?

两个 UICollectionView 的初始化和切换

如何在 UICollectionView 中的 UICollectionViewCells 之间添加视图?

UICollectionView基本使用和常用代理方法解释

如何快速获取 UICollectionView 中的单元格 atIndex?

如何仅刷新/重绘 uicollectionview 中的补充视图?