【发布时间】:2026-01-29 18:55:01
【问题描述】:
我们有两个具有一对一关系的表。 personel.idpersonel 映射到 personeltochart.idpersonel。
- 人员
- 个人图表
在登录事件中,我们从网络服务同步personel 表的数据,并将其保存到personel 表中。我们必须获取另一个事件的其他表数据并保存。
问题是当我们尝试从这两个表中获取数据时,为什么我们正确获取了personel 表的数据,但personeltochart 表的数据为零?
人员
名字
个人身份
personelToChart
身份证号
个人身份
这里是一个保存表数据的例子:
let jsonEmza = try jsonDecoder.decode([JSONNameTabel].self, from: data)
var privateContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
privateContext = CoreDataManager.shared.persistentContainer.viewContext
jsonEmza.forEach({ (jsonCompany) in
let tabel = jsonCompany.tableName
if tabel == "Personel"{
jsonCompany.personel?.forEach({ (field) in
let personel = Personel(context: privateContext)
personel.firstname = field.firstName
personel.idpersonel = field.id
})
do {
try privateContext.save()
} catch let saveErr {
print("Failed to save personel:", saveErr)
}
}
获取示例
let context = CoreDataManager.shared.persistentContainer.viewContext
let fetchRequest = NSFetchRequest<Personel>(entityName: "Personel")
let predicate = NSPredicate(format: "idpersonel == %@", "147")
fetchRequest.predicate = predicate
do {
let listNameh = try context.fetch(fetchRequest)
listNameh.forEach({ (item) in
print(item.idpersonel ?? "")
print(item.lastname ?? "")
print(item.firstname ?? "")
print(item.personelToChart?.id)
})
} catch let fetchErr {
print("Failed to fetch Personel:", fetchErr)
}
item.personelToChart?.id 的数据为nil。
为什么会这样?
【问题讨论】:
-
您尚未在第一个代码示例中创建的
Personel和(可能)Chart表之间设置任何关系。仅仅宣布关系是不够的。您必须将对象分配给Personel上的personelToChart属性。
标签: ios swift core-data fetch relationship