gpt4 book ai didi

ios - Swift:数据库更新后 View Controller 崩溃

转载 作者:行者123 更新时间:2023-11-30 14:13:00 24 4
gpt4 key购买 nike

我正在尝试制作一个RSS阅读器,它有一个数据库,每30分钟左右更新一次(我目前有10秒进行测试),当你选择一组你想要查看的Feeds时,它需要从数据库中获取它们并将它们放入名为 feedItems 的数组中。仅在 viewDidLoad 中修改此数组以从数据库复制它,并在配置单元格以查看该特定帖子是否已被删除时进行修改。

override func viewDidLoad() {
super.viewDidLoad()
self.title = theTitle
let fetchRequest = NSFetchRequest(entityName: "Feed")
if let fetchResults = managedObjectContext!.executeFetchRequest(fetchRequest, error: nil) as? [Feed] {
for f: Feed in fetchResults{
if f.category == theUrl{

feedItems.append(f)
}
}

feedItems.sort({ self.getFeedId($0.url).toInt() > self.getFeedId($1.url).toInt() })
}

if deletedFeeds.count > 10000 {
deletedFeeds = []
}
}

电池配置:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("FeedCell", forIndexPath: indexPath) as! UITableViewCell
let item = feedItems[indexPath.row] as Feed
// Configure the cell...
if contains(deletedFeeds, getFeedId(item.url)){
feedItems.removeAtIndex(indexPath.row)
}else{
cell.textLabel?.text = item.name
cell.detailTextLabel?.text = item.summary
}
return cell
}

问题是,如果数据库(它是一个核心数据数据库并在单独的线程上更新)在您位于保存所有帖子的 tableViewController 中时更新,则数组 feedItems 中每个项目的所有对象变为 nil,如果您单击某个单元格或向下滚动表格 View ,这会导致程序崩溃,因为每个单元格的 url 都是 nil。我不知道为什么会发生这种情况,因为除了 viewDidLoad 之外,我没有编写任何应该从数据库更新 feedItems 数组的内容。如果我退出 tableViewController Controller 并导航回它,它会很好地更新。如果我在 tableViewController 更新时保留在其中,为什么数组中的每个对象都会变成 nil?如何修复它,以便当我仍在该 tableViewController 中时它可以正确更新?

最佳答案

将 Core Data 对象复制到数组中的解决方案是有问题的。你遇到的问题是具有象征意义的。有更好的方法来解决这个问题。

您需要使用NSFetchedResultsController。它优化了表格 View 中核心数据实体的显示,以提高性能和内存。您可以实现 NSFetchedResultsControllerDelegate 以在数据更改时更新 TableView 。

首先,创建一个新项目(主详细信息,选中“核心数据”)并检查 MasterViewController。只要遵循这个模式即可。

关于ios - Swift:数据库更新后 View Controller 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31545652/

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