Вложенная таблица в coreData ios swift - PullRequest
0 голосов
/ 04 мая 2020

Мне нужно установить вложенную таблицу в основных данных. Например, у меня есть таблица MenuList, в которой у меня есть атрибуты (скажем, это имя, идентификатор, адрес, адрес электронной почты). Поэтому я хочу добавить один атрибут childMenu, который является массивом пользовательских объектов, и снова в нем есть еще один атрибут, называемый subchildMenu, с объектами пользовательских массивов. Поэтому мне нужно сохранить все эти данные, используя coredata и функции управления для CRUD.

Ниже приведен код, который я пробовал, но застрял при сохранении childMenu.

import Foundation
import CoreData


extension MenuList {

    @NSManaged public var sIcon                 : String?
    @NSManaged public var sId: String?
    @NSManaged public var sName                 : String?
    //@NSManaged public var sChildMenu            : NSSet?


    @nonobjc public class func nsfetchRequest() -> NSFetchRequest< MenuList > {
        return NSFetchRequest< MenuList >(entityName: "MenuList")
    }

    //------------------------------------------------------------------------------
    // MARK:- Fetch Record
    //------------------------------------------------------------------------------

    class func fetchAllRecords() -> [MenuList]? {

        let fetchRequest = MenuList.nsfetchRequest()

        do {
            let arr = try AppDelegate.shared.persistentContainer.viewContext.fetch(fetchRequest)
            return arr
        } catch {
            Logger.error("\(self) - \(error.localizedDescription)")

            return nil
        }
    }

    //------------------------------------------------------------------------------

    class func fetchAllRecords(forId: String) -> [MenuList]? {

        let fetchRequest = MenuList.nsfetchRequest()
        fetchRequest.predicate = NSPredicate(format: "sId = %@", forId)

        do {
            let arr = try AppDelegate.shared.persistentContainer.viewContext.fetch(fetchRequest)
            return arr
        } catch {
            Logger.error("\(self) - \(error.localizedDescription)")
            return nil
        }
    }


    //------------------------------------------------------------------------------
    // MARK:- Save Record
    //------------------------------------------------------------------------------

    class func saveRecord(_ tblData: [ListData]) {

        for data in tblData {

            if let tempId = data.id {

                if let arrData = MenuList.fetchAllRecords(forId: tempId),arrData.count > 0 {

                    let tblData = arrData.first!

                    tblData.sId = tempId


                    if let childMenu = data.childMenu,childMenu.count > 0 {
                       // tblData.sChildMenu = NSSet.init(array: childMenu)
                        TblChildMenu.saveRecord(childMenu)
                    }


                    if let name = data.name {
                        tblData.sName = name
                    }


                    do {
                        try AppDelegate.shared.persistentContainer.viewContext.save()
                        Logger.log("\(self) Updated Here => =>")
                    } catch {
                        Logger.error("\(self) Update Error Here => \(error.localizedDescription)")
                    }

                } else {

                    let viewContext = AppDelegate.shared.persistentContainer.viewContext

                    let tblStatusEntity = NSEntityDescription.entity(forEntityName: "MenuList", in: viewContext)

                    let tblStatusObj = NSManagedObject(entity: tblStatusEntity!, insertInto: viewContext) as! MenuList

                    tblStatusObj.sId = tempId

                    if let childMenu = data.childMenu,childMenu.count > 0 {
                       // tblStatusObj.sChildMenu = NSSet.init(object: childMenu)//NSSet.init(array: childMenu)
                        TblChildMenu.saveRecord(childMenu)
                    }

                    if let name = data.name {
                        tblStatusObj.sName = name
                    }

                    do {
                        try viewContext.save()
                        Logger.log("\(self) Saved Here => =>")
                    } catch {
                        Logger.error("\(self) Save Error Here => \(error.localizedDescription)")
                    }
                }
            }

        }
    }

    //------------------------------------------------------------------------------
    // MARK:- Delete Record
    //------------------------------------------------------------------------------

    class func deleteRecord(forId: String) {

        let fetchRequest = MenuList.nsfetchRequest()
        fetchRequest.predicate = NSPredicate(format: "sId = %@", forId)

        do {

            let arrData = try AppDelegate.shared.persistentContainer.viewContext.fetch(fetchRequest)
            if arrData.count > 0 {
                AppDelegate.shared.persistentContainer.viewContext.delete(arrData.first!)
            }

        } catch {
            Logger.error("\(self) Delete = \(error.localizedDescription)")
        }
    }
}

Любая помощь будет быть оцененным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...