Ich habe zwei Einheiten, Device und MDM. Gerät hat zwei Attribute, Asset-Tag und Standort. MDM hat zwei Attribute, Asset-Tag und Betriebssystem. Ich versuche, asset_tag, os und location für jedes asset_tag-Gerät abzurufen. Ich hatte Xcode erstellen meine Subklassen:Core Data Swift 3 Beziehung
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?
}
Meine Abrufanforderung ist wie folgt:
var request = NSFetchRequest<NSFetchRequestResult>()
request = Device.fetchRequest()
request.returnsObjectsAsFaults = false
let results = try context.fetch(request) as! [Device]
Nicht sicher, wie so etwas wie device.mdms.os
bekommen zu arbeiten, um das Betriebssystem von einem bestimmten Gerät zu bekommen.
Wie in der anderen Frage erwähnt, ist Ihre Benennung verwirrend, bitte beachten Sie die Konvention. Eine Eins-zu-Eins-Beziehung ist "Gerät: Gerät" (Singular), eine Eins-zu-Viele-Beziehung ist "Geräte: NSSet" (Mehrzahl). – vadian
Ich kehrte meine Beziehungen um und ließ Xcode meine Unterklassen neu erstellen. Jetzt sieht es so aus: '@NSManaged public var devices: Device' – Martheli
Wiederum bedeutet' devices' (Plural) ** viele ** Geräte. Der entsprechende Typ ist 'NSSet'. Ansonsten (** ein ** Gerät, Singular) benutze 'Gerät' (ohne 's'). – vadian