IOS - 如何在Core Data Swift中将数据插入到具有关系的不同表中

时间:2018-02-04 13:02:15

标签: ios swift core-data fetch relationship

我们有两个一对一关系的表。 personel.idpersonel映射到personeltochart.idpersonel

  1. 企业人事
  2. personeltochart
  3. 在登录事件中,我们从Web服务同步personel表的数据,并将其保存到personel表中。我们必须获取另一个事件的其他表数据并保存它。

    问题是当我们尝试从这两个表中获取数据时,为什么我们正确获取personel表的数据,但来自personeltochart表的数据是否为nil?

    企业人事

    名字
    idpersonel

    personelToChart

    id
    idpersonel

    以下是保存表格数据的示例:

                        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

    为什么会这样?

1 个答案:

答案 0 :(得分:0)

就像Sam说的那样,你需要在Personel上为PersonelToChart分配一个对象。例如,这是我的核心数据模型

腿(flightId,flightName,Aircraft) 飞机(aircraftId,aircraftName) 确保您在Flight实体中的关系看起来像this

let Aircraft = AircraftCoreData(context: self.persistentContainer.viewContext)
        secondAircraft.aircraftId = 02334
        secondAircraft.aircraftName = "ABC"

        leg.aircraft = Aircraft

您将看到我们创建了飞机对象,为其属性分配了值,然后将对象分配给leg.aircraft属性。现在,当您获取数据时,您将无法获得