gpt4 book ai didi

ios - .reloadData() 和 .setNeedsDisplay() 被忽略

转载 作者:搜寻专家 更新时间:2023-11-01 06:06:20 25 4
gpt4 key购买 nike

我从点击此方法的工具栏创建了一个分页工具:

func nextPage(sender: UIBarButtonItem) {
let currentChapter = page.valueForKey("chapter") as! Int
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let fetchRequest = NSFetchRequest(entityName: "Page")
fetchRequest.predicate = NSPredicate(format: "(chapter = %d)", currentChapter + 1)
do {
let result = try managedContext.executeFetchRequest(fetchRequest)



// It is here, I can clearly see we have the old object.

self.page = result[0] as! NSManagedObject

// And here I can clearly see that a new object was set.



self.tableView.reloadData()
self.view.setNeedsDisplay()
} catch {
let fetchError = error as NSError
print(fetchError)
}
}

此方法位于我的 UIViewController 中,其设置如下:

import UIKit
import CoreData

class PageViewController: UIViewController, UITableViewDelegate, UINavigationBarDelegate, UITableViewDataSource {

// Mark: Properties

var page: NSManagedObject!
var tableView = UITableView()
var toolBar = UIToolbar()

override func viewDidLoad() {
super.viewDidLoad()

tableView.frame = CGRectMake(0, 0, view.frame.width, view.frame.height - 50)
tableView.estimatedRowHeight = 200
tableView.rowHeight = UITableViewAutomaticDimension
tableView.scrollEnabled = true
tableView.userInteractionEnabled = true
tableView.delegate = self
tableView.dataSource = self
tableView.tableHeaderView = containerView

self.view.addSubview(tableView)

知道为什么我的 tableView 没有重新加载它的新数据吗?


更新

按照@Koder 和@Simon 的推荐,我更新了我的代码......但是 UI 仍然没有更新:

func nextPage(sender: UIBarButtonItem) {
let currentChapter = page.valueForKey("chapter") as! Int
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let fetchRequest = NSFetchRequest(entityName: "Page")
fetchRequest.predicate = NSPredicate(format: "(chapter = %d)", currentChapter + 1)
do {
let result = try managedContext.executeFetchRequest(fetchRequest)
self.page = result[0] as! NSManagedObject
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadData()
self.view.setNeedsDisplay()
}

} catch {
let fetchError = error as NSError
print(fetchError)
}
}

根据 LucaD 的建议,我还将包括我的 numberOfRowsnumberOfSections :

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.total
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}

最佳答案

您应该在主线程上触发所有 UI 刷新代码。要更新 tableView,请尝试从后台线程触发以下命令:

dispatch_async(dispatch_get_main_queue())
{
self.tableView.reloadData()
}

此代码块将在主线程上异步执行。

关于ios - .reloadData() 和 .setNeedsDisplay() 被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36313652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com