IOS - 如何在 Core Data Swift 中将数据插入到具有关系的不同表中
Posted
技术标签:
【中文标题】IOS - 如何在 Core Data Swift 中将数据插入到具有关系的不同表中【英文标题】:IOS - How to Insert data into different tables with relationship In Core Data Swift 【发布时间】:2018-02-04 13:02:15 【问题描述】:我们有两个具有一对一关系的表。 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
属性。
【参考方案1】:
就像 Sam 所说,您需要在 Personel 上为 PersonelToChart 分配一个对象。例如,这是我的核心数据模型
Leg (flightId, flightName, Aircraft) 飞机(aircraftId,aircraftName) 确保您在 Flight 实体中的关系类似于
let Aircraft = AircraftCoreData(context: self.persistentContainer.viewContext)
secondAircraft.aircraftId = 02334
secondAircraft.aircraftName = "ABC"
leg.aircraft = Aircraft
您将看到我们创建了飞机对象,为其属性分配了值,然后将该对象分配给了 leg.aircraft 属性。现在当你获取数据时,你不会得到 nil
【讨论】:
以上是关于IOS - 如何在 Core Data Swift 中将数据插入到具有关系的不同表中的主要内容,如果未能解决你的问题,请参考以下文章
IOS Swift Core Data如何在propertiesToFetch中添加不在propertiesToGroupBy中的字段
Swift - 如何检查现有的 Core Data Store iOS
如何在 SWIFT 的 IOS CORE-DATA 请求中使用 SQL GROUP BY 和 SUM 函数?
如何正确设置 Core Data Stack 到 iOS 和 Swift 中的第一个视图控制器?