2015-09-27 4 views
0

У меня возникла странная проблема с моими основными данными. У меня есть следующие отношения: enter image description hereВопрос о связи с Coredata

Контакт может принадлежать одной категории, а категория может иметь несколько контактов. Я хотел бы получить доступ к моей категории в контакте при создании моего контакта. Являются ли мои отношения правильными?

Я получаю следующую ошибку: «невозможно присвоить значение типа« String! » к значению типа "Категория» в этой области: 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 

} 

ответ

2

category свойством Contact объекта является Category объектом. Но вы пытаетесь установить его как String (categoryField.text). Вероятно, вы захотите использовать объект Category, name - 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, используйте, что, если она существует, или создать новую категорию, если не:

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 
    } 
+0

не согласен ли вы в частном чате, я очень новичок в быстром и ios, вам нужно будет задать несколько вопросов. –

+0

@congolesedevelopver С удовольствием заходим в чат. – pbasdf

+0

ОК спасибо. я доступен –

1

Ответ находится в вашей ошибке:

Cannot assign a value of type 'String!' to a value of type 'Category'

Ошибка говорит, что вы r 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 

Теперь назначьте, что к вашей категории собственности в контакте, как это:

newContact.category = category 
+0

спасибо за ответ, но я уже получил категория создала –

+0

Вот почему я написал, что вы можете создать новую категорию или получить существующую категорию любыми способами, то есть через «NSFetchRequest», в свою базу данных или уже выбранную категорию. Я писал подробности только о создании новой категории, идея заключалась в том, чтобы дать вам указатель, где вам нужно делать правильные вещи. –

Смежные вопросы