Мне нужно установить вложенную таблицу в основных данных. Например, у меня есть таблица 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)")
}
}
}
Любая помощь будет быть оцененным.