【发布时间】:2018-05-30 08:11:40
【问题描述】:
我设置了一个数组来保存来自 Core Data 的数据。
var users:[Users] = []
当我想从 tableView 中删除我的一个数据时,我设置了这个函数,如下所示:
func deleteData(username:IndexPath){
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
context.delete(users[username.row])
print("test1")
print(users[username.row])
print(users)
print(users.count)
do {
try context.save()
print("test2")
print(users[username.row])
print(users)
print(users.count)
} catch {
print("Could'n save data")
}
}
我观察了这个操作,在这里发现了一些问题:
在context.save()下面,我输入了print(users),控制台出来的users数据是什么:
test2
<Users: 0x600000286770> (entity: Users; id: 0xd000000000e40000 <x-coredata://2D4CEBDA-C1B2-4CEC-A734-B7C9579C12A5/Users/p57> ; data: <fault>)
[<Users: 0x600000281ea0> (entity: Users; id: 0xd000000000c40000 <x-coredata://2D4CEBDA-C1B2-4CEC-A734-B7C9579C12A5/Users/p49> ; data: {
username = test1;
}), <Users: 0x6000002823f0> (entity: Users; id: 0xd000000000c80000 <x-coredata://2D4CEBDA-C1B2-4CEC-A734-B7C9579C12A5/Users/p50> ; data: {
username = test2;
}), <Users: 0x6000002823a0> (entity: Users; id: 0xd000000000cc0000 <x-coredata://2D4CEBDA-C1B2-4CEC-A734-B7C9579C12A5/Users/p51> ; data: {
username = test3;
}), <Users: 0x600000282350> (entity: Users; id: 0xd000000000d00000 <x-coredata://2D4CEBDA-C1B2-4CEC-A734-B7C9579C12A5/Users/p52> ; data: {
username = test4;
}), <Users: 0x600000282300> (entity: Users; id: 0xd000000000d40000 <x-coredata://2D4CEBDA-C1B2-4CEC-A734-B7C9579C12A5/Users/p53> ; data: {
username = test5;
}), <Users: 0x600000286770> (entity: Users; id: 0xd000000000e40000 <x-coredata://2D4CEBDA-C1B2-4CEC-A734-B7C9579C12A5/Users/p57> ; data: <fault>)]
6
但我只有 5 个数据,而不是 6 个。这个问题有什么问题?
【问题讨论】:
-
如果您担心数组中的最后一项显示为错误,则无需担心。见this answer。错误只是 CoreData 节省内存,只要您访问第六项的任何属性,正确的数据就会被静默填充。