斯威夫特一对多关系

时间:2015-07-10 14:53:04

标签: swift core-data entity one-to-many xcdatamodel

我有两个实体,User和Task。它们是一对多关系的链接器,这就是它们的样子

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 Userresponsable Task是相同的东西,我需要做的是,负责135482dfsq4g1的任务,打印用户实体的相应名称(所以id 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 = ""
    }

任务?。是否负责找不到用户?.id,所以我无法比较:

Optional("76bbfe695318d471a541bc3333e58eea28acae54")
nil

任何帮助都将不胜感激。

问候。

1 个答案:

答案 0 :(得分:1)

只需删除责任属性,并将用户关系重命名为负责。你会得到

NSManaged var responsable: User

并且负责?.name (和负责?.id ,如果你真的需要它)将是直截了当的。