Swift 一对多关系

Posted

技术标签:

【中文标题】Swift 一对多关系【英文标题】:Swift One to many relationship 【发布时间】:2015-07-10 14:53:03 【问题描述】:

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

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 让我在任务表上执行我的请求:

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

在这两个实体上,我有一个共同的属性,UseridTaskresponsable 是相同的东西,我需要做的是,对于具有135482dfsq4g1responsible 的任务,打印用户实体的相应名称(因此 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 = ""
    

task?.responsable 找到但没有 user?.id,所以我无法比较:

Optional("76bbfe695318d471a541bc3333e58eea28acae54")
nil

任何帮助将不胜感激。

问候。

【问题讨论】:

为什么有责任财产和用户关系?任务可以让 John 作为用户端 Anna 负责吗? 一个任务有一个负责人(一个用户),但一个用户可以有多个任务。 user 是一个包含用户名和 id 的表。任务只有用户 ID。我需要打印用户名而不是id,这就是我做这种关系的原因,是不是搞错了? 【参考方案1】:

只需删除 responsible 属性并将关系 user 重命名为 responsible。你会得到

NSManaged var responsable: User

得到responsible?.name(如果你真的需要responsible?.id)会很简单。

【讨论】:

以上是关于Swift 一对多关系的主要内容,如果未能解决你的问题,请参考以下文章

核心数据一对多插入与现有关系swift

一对多关系CoreData Swift

Swift 2.0 一对多的关系——仍然是 NSOrderedSet?

Realm Swift 选择与一对多关系实体中的一个字段匹配的所有值

在 Swift Core Data 中从一对多关系中获取对象

Swift 2.1 Core Data - 保存具有一对多关系的数据,但如果已经存在则不要添加异构数据