联系人可以属于一个类别,而一个类别可以有多个联系人。我想在创建联系人时访问联系人中的类别。 我的关系是否正确?
我收到以下错误"无法指定类型'字符串的值!'值类型'类别'"在这个领域里: newContact.category = categoryField.text
这就是我尝试访问我的类别字段的方式:
// MARK: - Properties
var contact: Contact?
func createCategory() {
let entity = NSEntityDescription.entityForName("Category", inManagedObjectContext: context!)
let category = Category(entity: entity!, insertIntoManagedObjectContext: context)
let index = pickerView.selectedRowInComponent(0)
let color = categoryColor[index]
category.name = name.text
category.descript = descriptionField.text
category.color = color
println(category.name)
context?.save(nil)
name.text = ""
descriptionField.text = ""
}
func createNewContact() {
let entity = NSEntityDescription.entityForName("Contact", inManagedObjectContext: context!)
let newContact = Contact(entity: entity!, insertIntoManagedObjectContext: context)
newContact.name = nameField.text
newContact.email = emailField.text
newContact.phone = phoneField.text
newContact.category = categoryField.text
newContact.photo = UIImageJPEGRepresentation(imageHolder.image, 1)
var error: NSError?
context?.save(&error)
}
And that's how my entities look like:
@objc (Contact)
class Contact: NSManagedObject {
@NSManaged var email: String
@NSManaged var name: String
@NSManaged var phone: String
@NSManaged var photo: NSData
@NSManaged var category: Category
}
和
@objc (Category)
class Category: NSManagedObject {
@NSManaged var color: AnyObject
@NSManaged var descript: String!
@NSManaged var name: String!
@NSManaged var contact: NSOrderedSet
}
答案 0 :(得分:2)
category
对象的Contact
属性是Category
对象。但是您尝试将其设置为String(categoryField.text
)。您可能希望使用Category
等于name
的{{1}}对象。
您可以创建一个:
categoryField.text
但您可能已经使用 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
创建了Category
。因此,通常的方法是搜索具有正确name
的类别,如果存在则使用该类别,或者如果不存在则创建新类别:
name
答案 1 :(得分:1)
答案出在你的错误中:
无法指定“String!”类型的值到“类别”类型的值
错误在于,category
类中的Contact
属性被定义为保存Category
类型对象,而不是NSString
的实例。
所以你需要分配一个Category
类型的对象,如下所示:
创建新类别,或以任何方式获取现有类别,在这里我们将创建新类别并将其分配给联系人。
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
现在将其分配给Contact中的category属性,如下所示:
newContact.category = category