对象之间的核心数据关系

时间:2014-08-27 13:07:11

标签: ios core-data swift

我对如何在核心数据中创建2个NSObject之间的关系提出疑问。

首先我有这个CoreData结构。

Core Data

文件和表单之间存在关系。表单可以有多个文件,但一个文件只能有一个表单。

我只使用Swift创建了NSObject(所以没有桥接头) - 现在有2个核心数据NSObject类:

class Forms: NSManagedObject {

@NSManaged var uuid: String
@NSManaged var damagenumber: String
@NSManaged var internalnumber: String
@NSManaged var date: NSDate
@NSManaged var name: String
@NSManaged var street: String
@NSManaged var postalcode: String
@NSManaged var city: String
@NSManaged var country: String
@NSManaged var templateJSON: String
@NSManaged var formname: String
@NSManaged var files: NSSet

}

class Files: NSManagedObject {

@NSManaged var url: String
@NSManaged var forms: Forms

}

我的文件在这里作为NSSet。

所以,我希望例如添加一个包含5个文件的表单。所以像这样的事情:

var request = NSFetchRequest(entityName: "Forms")
request.returnsObjectsAsFaults = false;

let newFormObject = NSEntityDescription.insertNewObjectForEntityForName("Forms", inManagedObjectContext: context) as Forms

newFormObject.setValue(uuid, forKey: "uuid")
......

//插入文件

 for index in 0...4 {

     var request = NSFetchRequest(entityName: "Files")
     request.returnsObjectsAsFaults = false;

     let newFileObject = NSEntityDescription.insertNewObjectForEntityForName("Files", inManagedObjectContext: context) as Files
     newFileObject.setValue(arrFiles[index], forKey: "url")

}

好的一切正常。但是:我如何连接这两个对象?如果您使用Obj-C NSObjects而不是Swift我有一些方法将文件添加到表单。但是我怎么能只在Swift中做到这一点?

如果我有关系 - 我如何从某个表格中读取所有文件对象?

修改:

我现在换了一行:

@NSManaged var files: NSSet

@NSManaged var files: [Files]

在循环中使用:

newFormObject.files.append(newFileObject)

这给我带来了以下错误:

***错误:此进程调用了一个NSArray-taking方法,例如initWithArray:,并传入一个NSSet对象。现在这种情况正在解决,但很快就会让你感到悲伤。

1 个答案:

答案 0 :(得分:0)

减少代码:仅在需要检索对象时设置NSFetchRequests。因此,每次创建新对象时都不需要以下行:

//Forms
var request = NSFetchRequest(entityName: "Forms")
request.returnsObjectsAsFaults = false;

//Files
var request = NSFetchRequest(entityName: "Files")
request.returnsObjectsAsFaults = false;

保持一致:您已设置NSManagedObject子类。因此,请使用它们,不要使用键值编码。替换:

newFormObject.setValue(uuid, forKey: "uuid")

使用:

newFormObject.uuid = uuid

<强>问题:

  

如何连接这两个对象?

在循环结束时,单行代码应该足够了:

newFileObject.forms = newFormObject // where forms is the name of your relationship

<强>问题:

  

如何从特定表单中读取所有文件对象

当您需要检索某个Files objects的{​​{1}}时,您可以执行NSFetchRequest(允许您设置谓词,排序等等),或者您可以简单地获取所有的NSSet像这样的相关对象:

Form