【发布时间】:2020-07-17 13:34:11
【问题描述】:
我是 CoreData 的新手,我在让它工作时遇到了一些困难。
我遇到的问题是每次加载视图控制器时,从核心数据中获取的数据都会重复。
例如:
- 在名为 Order 的实体中只有 1 个对象
- 主视图上有两个视图控制器,另一个是订单视图
- 第一次 segue 从主视图推送到订单视图,订单视图显示 1 个订单(普通)
- 从订单视图返回到主视图
- 第二次segue从主视图推送到订单视图,订单视图 显示 2 个订单(重复)
- 再次,从订单视图返回到主视图
- 第三次进入订单视图,订单视图显示4个订单(下次 将是 8 个等等)
- 退出应用,重新输入,返回1个订单
不知道为什么每次调用 fetch 方法都会返回重复的对象
订单视图控制器
var dataSource = [FailedOrderEntity](){
didSet {
tableView.reloadData()
}
}
override func viewDidLoad(){
super.viewDidLoad()
tableView.dataSource=self
tableView.delegate=self
fetchFailedOrders()
}
func fetchFailedOrders(){
dataSource.removeAll()
dataSource = failedOrderCoreData.fetchAll()
}
//Other are all table related
FailedOrderCoreData
class FailedOrderCoreData {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
var context = NSManagedObjectContext()
let entityName = "FailedOrderEntity"
init() {
context = appDelegate.persistentContainer.viewContext
}
func fetchAll() -> [FailedOrderEntity] {
let request = NSFetchRequest<NSFetchRequestResult>(entityName: entityName)
var fetched: [FailedOrderEntity] = []
do {
let results = try context.fetch(request)
if !results.isEmpty {
for result in results as! [NSManagedObject] {
//breakpoint: 1st time call result returns 1, 2nd returns 2, 3rd returns 4, 4th returns 8..so on
let order = FailedOrderEntity(context: context)
order.order_id = result.value(forKey: "order_id") as? Int32 ?? 0
fetched.append(order)
}
}
} catch {
print("ERROR: Could not fetch orders")
}
return fetched
}
}
感谢您的帮助
【问题讨论】: