不丢失数据的NSManagedObject的汇总表视图

问题描述 投票:1回答:1

我有一个由称为SpeedTest的自定义CoreData对象数组支持的表视图。在我的tableview控制器类中,我能够成功获取CoreData中保存的所有SpeedTest对象并填充tableview。但是,随着我滚动和单元的重用本身。我丢失了SpeedTest对象的数据部分。这是我的视图控制器的片段:

private var tests: [SpeedTest] = []

override func viewDidLoad() {
    super.viewDidLoad()

    setupNavigationController()
    setupTableView()
    fetchSavedTests()
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "completedTestTableViewCell", for: indexPath) as! CompletedTestTableViewCell
    cell.set(with: tests[indexPath.row])
    return cell
}

private func fetchSavedTests() {
    tests = []
    tests = CoreDataManager().retrieveTests()
    self.tableView.reloadData()      
}

CoreDataManager:

public func retrieveTests() -> [SpeedTest] {
    return persistenceManager.fetch(SpeedTest.self)
}

PersistenceManager:

public func fetch<T: NSManagedObject>(_ objectType: T.Type) -> [T] {
    let entityName = String(describing: objectType)
    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: entityName)

    do {
        let fetchedObjects = try context.fetch(fetchRequest) as? [T]
        return fetchedObjects ?? [T]()
    } catch let error as NSError {
        print("Could not fetch. \(error), \(error.userInfo)")
        return [T]()
    }
}

但是,当我滚动并尝试使用SpeedTest中的tests对象重新分配单元格时,SpeedTest对象看起来像这样:

<SpeedTest: 0x600000a79630> (entity: <null>; id: 0xc49587265ff1ed81 <x-coredata://AF742730-509F-4F35-8859-C86494498F30/SpeedTest/p10>; data: <fault>)

是否有办法确保我的NSManagedObject的数据不会离开我?我知道我可以将SpeedTest转换为另一个自定义对象并使用它,但这就是我要避免的事情。

swift core-data tableview nsmanagedobject
1个回答
0
投票
之前:

let cell = tableView.dequeueReusableCell(withIdentifier: "completedTestTableViewCell", for: indexPath) as! CompletedTestTableViewCell

之后:

let cell = self.tableView.dequeueReusableCell(withIdentifier: "completedTestTableViewCell", for: indexPath) as! CompletedTestTableViewCell

有时tableview原型单元会丢失

© www.soinside.com 2019 - 2024. All rights reserved.