Noch in Schwierigkeiten mit Kerndaten Beziehungen.Coredata/SWIFT erhalten Datensätze mit Beziehung
Beispiel:
Entity Benutzer (IDU NameU = Attribute) Entity-Gerät (IDD, Named = Attribute)
core data model Frage: Ich habe ein nsset Problem, wenn ich ein neues Gerät erstellen mit dem Benutzer verknüpft Ich denke, es zu den vielen n-Beziehungen verwandt ist
immer noch nicht funktioniert UPDATE:
Code:
@IBAction func addDeviceBoutonAction(sender: AnyObject) {
print("Creation Device debut")
var nbCharacteres = Int((newDeviceNameTextField.text?.characters.count)!)
if currentUserName == "" {
print("Erreur creation device/currentUserName = Vide --> Abort")
}
else if nbCharacteres == 0 {
print("Erreur creation device/newDeviceNameTextField = Vide --> Abort")
}
else
{
// init du MOC
let MOC = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
// creation de la requete sur l'entité User avec un predicat : on recupere que les infos du user selectionné dans le pickerViewUser (on
// travaille avec la variable globale currentUserName qui a été initialisée lors du didSelectRow du pickerViewUser)
let fetchRequestUser = NSFetchRequest(entityName: "User")
print("Creation device/trace currentUserName = \(currentUserName)")
let userPredicate = NSPredicate(format: "userName == %@", currentUserName)
// On colle le predicat dans la requete
fetchRequestUser.predicate = userPredicate
var requestError: NSError?
let existingUser = (try! MOC.executeFetchRequest(fetchRequestUser)) as! [User]
print("Creation device/trace existingUser[0].userName = \(existingUser[0].userName)")
// il faut passer par l'ID plutot que le nom
// firstUserFound de type User
let firstUserFound = existingUser[0]
print("Creation device firstUserFound = \(firstUserFound)")
// Insertion d'un nouveau Device dans la base (relationship n to n entre Device et User)
let existingDevicesForThisUser = firstUserFound.mutableSetValueForKey("device")
// Create Item Record
let newDevice = NSEntityDescription.insertNewObjectForEntityForName("Device",inManagedObjectContext: MOC) as! Device
//if let newDevice = createRecordForEntity("Device", inManagedObjectContext: MOC) {
// Set Attributes and values
newDevice.setValue(NSUUID().UUIDString, forKey: "deviceId")
newDevice.setValue(newDeviceNameTextField.text, forKey: "deviceName")
newDeviceNameTextField.text = ""
self.view.endEditing(true)
//newDevice.setValue("Device \(newDevice.count + 1)", forKey: "deviceId")
// Set Relationship
print("avant relationhips")
newDevice.setValue(firstUserFound, forKey: "users")
Fehler: Erstellungseinheit Debüt
Creation device/trace current Username = toto
Creation Gerät/trace existingUser [0] .userName = Optional ("toto")
Creation Gerät firstUserFound = (Einheit: Benutzer; ID: 0xd000000000080000; Daten: { Geräte = ""; userId = "8A32EAC6-87E2-4CF1-8265-5E7A32ABCEBB"; Benutzername = Toto; })
avant relationhips
2016.04.02 13: 55: 13.065 testcoredatarelationships [1568: 370.426] * Beenden app aufgrund abgefangene Ausnahme 'NSInvalidArgumentException', Grund: ‚Unacceptable Art von Wert zu -viele Beziehung: Eigenschaft = "Benutzer"; gewünschter Typ = NSSet; gegebener Typ = testcoredatarerelationships.User; Wert = (Entität: Benutzer; ID: 0xd000000000080000; Daten: { Geräte = ""; userId = "8A32EAC6-87E2-4CF1-8265-5E7A32ABCEBB"; userName = toto; }). ' * ersten Wurf Call-Stack:
Linie, die falsch ist: newDevice.setValue (firstUserFound, forKey: "Benutzer")
Erweiterung Geräte {
@NSManaged var deviceId: String?
@NSManaged var deviceName: String?
@NSManaged var cards: NSSet?
**@NSManaged var users: NSSet?**
}
Haben Sie die Jack-Instanz bereits? Sind Ihre Beziehungen bidirektional (sollten sie sein)? Zeigen Sie ein Bild des Entitätsmodells. – Wain
hallo Wain, eigentlich sind es nur Dummy-Daten.Ich stelle das Kernmodell (einige Felder sind unterschiedlich, aber es sollte in Ordnung sein) – h3630fr
Ich möchte ein echtes Beispiel erstellen, nur um zu verstehen, wie Beziehungen zwischen Entitäten funktioniert. also habe ich eine einfache Ansicht mit diesen einfachen Kerndaten erstellt, aber ich kann es nicht erreichen (brauche Hilfe zu beenden) – h3630fr