I\'m facing a weird issue with my core data. I\'ve the following relationship
A contact can belong to one category and a category can have multiple contacts. I\'d like
The answer is in your error:
Cannot assign a value of type 'String!' to a value of type 'Category'
The error is saying, that your category
property in Contact
class is defined to hold Category
type object rather than an instance of NSString
.
So you need to assign an object of type Category
, something like this:
Create new category, or get an existing category by any means, here we'll create new category and assign that to the contact.
let catEntity = NSEntityDescription.entityForName("Category", inManagedObjectContext: context!)
let category = Category(entity: catEntity!, insertIntoManagedObjectContext: context)
category.name = categoryField.text // get the name from field and set to category property
category.color = someColor //assign your required color
Now assign that to your category property in Contact, like this:
newContact.category = category
The category
property of a Contact
object is a Category
object. But you are trying to set it to be a String (categoryField.text
). You probably want to use a Category
object whose name
is equal to categoryField.text
.
You could create one:
let categoryEntity = NSEntityDescription.entityForName("Category", inManagedObjectContext: context!)
let newCategory = Category(entity: categoryEntity!, insertIntoManagedObjectContext: context)
newCategory.name = categoryField.text
// set the other properties for the Category as necessary
// then assign the relationship
newContact.category = newCategory
But you might already have created a Category
with that name
. So the usual approach would be to search for a Category with the right name
, use that if it exists, or create a new Category if not:
let categoryEntity = NSEntityDescription.entityForName("Category", inManagedObjectContext: context!)
let fetchRequest = NSFetchRequest()
fetchRequest.entity = categoryEntity!
fetchRequest.predicate = NSPredicate(format:"name == %@",categoryField.text)
let fetchResults = try? context!.executeFetchRequest(fetchRequest)
if let results = fetchResults {
var requiredCategory : Category
if (results.count > 0) {
requiredCategory = results[0] as! Category
} else {
requiredCategory = Category(entity: categoryEntity!, insertIntoManagedObjectContext: context!)
requiredCategory.name = categoryField.text
// set the other properties for the Category as necessary
}
newContact.category = requiredCategory
}