Should try like this:
I've two entities 1. Trigger 2. Numbers
Relation is Many-to-Many :- A trigger could have one or many Mobile Numbers attached, whereas the number may be part of more than one triggers in the Trigger table.
Step: 1

Step: 2

Now you would have situation Like this:


The code generated by Xcode is like this.
import Foundation
import CoreData
extension MobileNumber {
@nonobjc public class func fetchRequest() -> NSFetchRequest<MobileNumber> {
return NSFetchRequest<MobileNumber>(entityName: "MobileNumber");
}
@NSManaged public var mNumber: String?
@NSManaged public var title: String?
@NSManaged public var triggers: NSSet?
}
// MARK: Generated accessors for triggers
extension MobileNumber {
@objc(addTriggersObject:)
@NSManaged public func addToTriggers(_ value: Trigger)
@objc(removeTriggersObject:)
@NSManaged public func removeFromTriggers(_ value: Trigger)
@objc(addTriggers:)
@NSManaged public func addToTriggers(_ values: NSSet)
@objc(removeTriggers:)
@NSManaged public func removeFromTriggers(_ values: NSSet)
}
Similarly, you will have generated classes for other entities as well.
I have defined a function for fetching an Entity with UUID, which is always unique for all the rows of my Trigger table.
func fetchTriggerWithUUID(identifier: String) -> [Trigger]
{
let managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Trigger")
let predicate = NSPredicate(format: "uuid = %@", identifier)
fetchRequest.predicate = predicate
do {
let results = try managedObjectContext.fetch(fetchRequest) as! [Trigger]
return results
} catch let error as NSError {
print(error)
}
return []
}
Now wherever I need to play with data of any specific [row] or you can even with a set of [rows], this is so simple here in my case.
let result = AppDelegate.getAppDelegate().fetchTriggerWithUUID(identifier: notifIdentifier).first
numbers.removeAll()
for num in (result?.numbers)!
{
let numHere = num as! MobileNumber
numbers.append(numHere.mNumber!)
}
let messageHere = "Wanted to inform you! \n" + (result?.title)! + "\n" + (result?.desc)!
You can do with as much entities you have in your [.xcdatamodelID] file.