Skip to content

Instantly share code, notes, and snippets.

@dmytro-anokhin
Created August 13, 2019 19:49
Show Gist options
  • Select an option

  • Save dmytro-anokhin/39726195a6f99106b98df11d3f606236 to your computer and use it in GitHub Desktop.

Select an option

Save dmytro-anokhin/39726195a6f99106b98df11d3f606236 to your computer and use it in GitHub Desktop.
// First we need to create entities
let authorEntity = NSEntityDescription()
authorEntity.name = "Author"
authorEntity.managedObjectClassName = NSStringFromClass(Author.self)
let publicationEntity = NSEntityDescription()
publicationEntity.name = "Publication"
publicationEntity.managedObjectClassName = NSStringFromClass(Publication.self)
publicationEntity.isAbstract = true
let articleEntity = NSEntityDescription()
articleEntity.name = "Article"
articleEntity.managedObjectClassName = NSStringFromClass(Article.self)
// Publication is a base entity for Article
publicationEntity.subentities = [ articleEntity ]
// Attributes
let authorFullName = NSAttributeDescription()
authorFullName.name = "fullName"
authorFullName.attributeType = .stringAttributeType
let publicationNumberOfViews = NSAttributeDescription()
publicationNumberOfViews.name = "numberOfViews"
publicationNumberOfViews.attributeType = .integer64AttributeType
let publicationPublicationDate = NSAttributeDescription()
publicationPublicationDate.name = "publicationDate"
publicationPublicationDate.attributeType = .dateAttributeType
let articleText = NSAttributeDescription()
articleText.name = "text"
articleText.attributeType = .stringAttributeType
articleText.isOptional = true
// Now we can create relationships
let authorToPublication = NSRelationshipDescription()
authorToPublication.name = "publications"
authorToPublication.destinationEntity = publicationEntity
authorToPublication.deleteRule = .cascadeDeleteRule
let publicationToAuthor = NSRelationshipDescription()
publicationToAuthor.name = "author"
publicationToAuthor.destinationEntity = authorEntity
publicationToAuthor.maxCount = 1
publicationToAuthor.deleteRule = .nullifyDeleteRule
// Inverse relationships
authorToPublication.inverseRelationship = publicationToAuthor
publicationToAuthor.inverseRelationship = authorToPublication
// Set properties
authorEntity.properties = [ authorFullName, authorToPublication ]
publicationEntity.properties = [ publicationNumberOfViews, publicationPublicationDate, publicationToAuthor ]
articleEntity.properties = [ articleText ]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment