【发布时间】:2018-06-07 19:10:45
【问题描述】:
我有一个实体,它有一个名称,出于测试目的,我按照最近添加 (0) 到最旧添加的对象的顺序命名它们。
当我第一次启动应用程序时,它会按顺序加载我的实体(0,1,2...),但是如果我更改任何实体的名称属性,那么顺序就会一团糟。我使用 numberOfRows tableview 函数来测试这个,当重新加载 tableView 时调用它(如果我错了,请纠正我):
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {return 0}
let managedContext = appDelegate.managedObjectContext
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "GraphDataSet")
do {
graphSetArray.removeAll()
graphSetArray = try managedContext.fetch(fetchRequest)
} catch let error as NSError {
print("Could not fetch. \(error), \(error.userInfo)")
}
for i in 0..<graphSetArray.count{
let set = graphSetArray[(graphSetArray.count-1)-i]
print("Name: ", set.value(forKeyPath: "name") as? String)
}
return graphSetArray.count
}
据我所知,这会清空包含所有实体的数组(尽管我认为这是没有意义的,因为它被设置在下一行,但我想确定一下),然后获取填充数组的实体。然后我向后循环遍历数组(从最近到旧)并获取该索引的实体并打印其名称属性。
这是我每次启动应用程序时的控制台输出:
Name: Optional("0")
Name: Optional("1")
Name: Optional("2")
Name: Optional("3")
Name: Optional("4")
Name: Optional("5")
Name: Optional("6")
这是在我将实体名称值更改为与原来相同的值之后(只是为了保持它的顺序,但在技术上更改值并重新加载 tableView):
Name: Optional("5")
Name: Optional("4")
Name: Optional("1")
Name: Optional("3")
Name: Optional("0")
Name: Optional("2")
Name: Optional("6")
不知道为什么会发生这种情况,因为我每次都以相同的方式获取数据,并且每次重新启动应用程序时,订单都会恢复正常。我唯一的理论是,当实体属性发生变化时,排序就会混乱,没有模式。所以我想知道这个理论是否正确,如果是,那么有什么办法可以阻止顺序改变?
编辑:我刚刚注意到的一件事是,在它出现故障后,每次当我更改值时,它都会保持这个未排序的顺序
【问题讨论】:
标签: ios swift xcode core-data swift4