Swift Отношение один ко многим

У меня есть две сущности: Пользователь и Задача. Они связаны отношением «один ко многим», вот как они выглядят

import Foundation
import CoreData
@objc(User)
class User: NSManagedObject {
    @NSManaged var id: String
    @NSManaged var name: String
    @NSManaged var task: NSSet
}

а также

import Foundation
import CoreData

@objc(Task)
class Task: NSManagedObject {

    @NSManaged var context: String
    @NSManaged var date: String
    @NSManaged var detail: String
    @NSManaged var folder: String
    @NSManaged var id: String
    @NSManaged var responsable: String
    @NSManaged var status: String
    @NSManaged var summary: String
    @NSManaged var user: User

}

Отношение к xcdatamodel:

relationship: user, destination: User, Inverse: task  for Task
relationship: task, destination: Task, Inverse: user  for User

У меня есть fetchedResultController, который позволяет мне выполнять запросы к таблице Task:

func getFetchedResultsController(String) -> NSFetchedResultsController{
    frc = NSFetchedResultsController(fetchRequest: taskFetchRequest(folder), managedObjectContext: context!, sectionNameKeyPath: nil, cacheName: nil)
    return frc
}

func taskFetchRequest(String) -> NSFetchRequest {
    //on choisit sur quel Entity on travaille
    let fetchRequest = NSFetchRequest(entityName: "Task")
    //on Choisit sur quel attribut on place l'Order By. Ici sur Summary en Ascendant
    let predicate = NSPredicate(format: "folder = %@", folder)
    let sortDescriptor = NSSortDescriptor(key: "summary", ascending: true)
    fetchRequest.predicate = predicate
    fetchRequest.sortDescriptors = [sortDescriptor]
    return fetchRequest
}

В обоих объектах у меня есть один общий атрибут, id из User и responsable из Task - это одно и то же. Что мне нужно сделать, так это для задачи, которая имеет 135482dfsq4g1responsible, напечатать соответствующее имя объекта пользователя (так что идентификатор 135482dfsq4g1)

Я уже сделал несколько тестов, но ничего эффективного, например:

var task : Task?
var user : User?
if(task?.responsable == user?.id){
        OwnerTextField.text = user?.name
    }else{
        println(task?.responsable)
        println(user?.id)
        OwnerTextField.text = ""
    }

Задача?.responsable найдена, но не user?.id, поэтому я не могу сравнивать:

Optional("76bbfe695318d471a541bc3333e58eea28acae54")
nil

Любая помощь будет оценена по достоинству.

С Уважением.


person fselva    schedule 10.07.2015    source источник
comment
Почему у вас есть ответственное свойство и отношения с пользователем? Может ли задача иметь Джона в качестве пользователя и Анну в качестве ответственной?   -  person Mario Zannone    schedule 10.07.2015
comment
у задачи есть один ответственный (один пользователь), но у пользователя может быть несколько задач. user — это таблица, содержащая имя и идентификатор пользователя. задача имеет только идентификатор пользователя. Мне нужно напечатать имя пользователя вместо идентификатора, поэтому я делаю это отношение, это ошибка?   -  person fselva    schedule 10.07.2015


Ответы (1)


Просто удалите свойство ответственный и переименуйте связь пользователь как ответственный. Ты получишь

NSManaged var responsable: User

и получить responsible?.nameresponsible?.id, если вам это действительно нужно) будет несложно.

person Mario Zannone    schedule 10.07.2015