我有一个由称为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
转换为另一个自定义对象并使用它,但这就是我要避免的事情。
let cell = tableView.dequeueReusableCell(withIdentifier: "completedTestTableViewCell", for: indexPath) as! CompletedTestTableViewCell
之后:
let cell = self.tableView.dequeueReusableCell(withIdentifier: "completedTestTableViewCell", for: indexPath) as! CompletedTestTableViewCell
有时tableview原型单元会丢失