【发布时间】:2017-06-14 16:18:35
【问题描述】:
我有两个实体,Device 和 MDM。设备有两个属性,asset_tag 和 location。 MDM 有两个属性,asset_tag 和 os。我正在尝试获取每个asset_tag 设备的asset_tag、操作系统和位置。我让 Xcode 创建了我的子类:
extension Device {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Device> {
return NSFetchRequest<Device>(entityName: "Device")
}
@NSManaged public var asset_tag: String?
@NSManaged public var location: String?
@NSManaged public var devices: MDM?
}
extension MDM {
@nonobjc public class func fetchRequest() -> NSFetchRequest<MDM> {
return NSFetchRequest<MDM>(entityName: "MDM")
}
@NSManaged public var asset_tag: String?
@NSManaged public var os: String?
@NSManaged public var mdms: Device?
}
我的获取请求如下:
var request = NSFetchRequest<NSFetchRequestResult>()
request = Device.fetchRequest()
request.returnsObjectsAsFaults = false
let results = try context.fetch(request) as! [Device]
不知道如何让device.mdms.os 之类的东西工作以获取特定设备的操作系统。
【问题讨论】:
-
如另一个问题中所述,您的命名令人困惑,请考虑约定。一对一的关系是
device: Device(单数),一对多的关系是devices : NSSet(复数)。 -
我颠倒了我的关系并让 Xcode 重新制作了我的子类,所以现在它看起来像这样:
@NSManaged public var devices: Device -
再一次,
devices(复数)表示许多个设备。对应的类型是NSSet。否则(一个设备,单数)使用device(没有尾随s)。 -
好的,我改了。如果我想引用一个设备并且它是 os.我认为它类似于
device.mdms.os,但我该如何设置它来做到这一点?像这样的东西:let devices = NSEntityDescription.entity(forEntityName: "Device", in: context) -
就像字符串属性一样,您已经在代码中设置了关系。创建设备,创建 mdms 并设置关系(伪代码)
newDevice.mdm = newMDM
标签: ios swift core-data swift3