I just completed day 57 of 100 days of SwiftUI. Today I learnt more about CoreData. I learnt how to create CoreData models without optional, how to ensure the uniqueness of your models using constraints and the conditional saving of NSNSManagedObjectContext.
By default, properties of models created by CoreData are optional. To make them non-optional, you have to opt out of code-gen. You can do this by selecting the code-gen manual/none option and creating an NSManagedObject subclass.
This will create to two classes for you. Person+CoreDataProperties.swift
and Person+CoreDataClass.swift
(Person is the name of my model)
extension Person {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Person> {
return NSFetchRequest<Person>(entityName: "Person")
}
@NSManaged public var name: String?
public var wrappedName: String {
name ?? "Unknown Name"
}
}
extension Person : Identifiable {
}
The code above is an NSManagedObject subclass. It has an optional property called name
. In order to make that property non-optional, we simply created a computed property called wrappedName
.
In order to make your data unique, all you have to do is add this line of code to the willConnectTo
method in the SceneDelegate.swift
directly below the code that starts with let context
context.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
Top comments (0)