tutorial persistencia español datos data ios macos core-data swift relationship

español - persistencia de datos ios



Guardando CoreData a muchas relaciones en Swift (3)

Debe invocar addListObject(...) en el objeto de board :

board.addListObject(list) // notice that we pass just one object

Además, si desea poder agregar un conjunto de listas a un objeto de board particular, puede mejorar su extensión de clase de Board con métodos que acepten el conjunto de objetos:

func addList(values: NSSet) { var items = self.mutableSetValueForKey("lists"); for value in values { items.addObject(value) } } func removeList(values: NSSet) { var items = self.mutableSetValueForKey("lists"); for value in values { items.removeObject(value) } }

Tengo una relación de uno a muchos que parece ser así,

He configurado mis clases de modelo en un archivo para que coincida:

import CoreData import Foundation class Board: NSManagedObject { @NSManaged var boardColor: String @NSManaged var boardCustomBackground: AnyObject? @NSManaged var boardID: String @NSManaged var boardName: String @NSManaged var lists: NSSet } class List: NSManagedObject { @NSManaged var listID: String @NSManaged var listName: String @NSManaged var board: Board }

Debido a que estoy recuperando datos de múltiples puntos finales JSON, tengo que guardar mis listas por separado de mis tableros. Lo que quiero hacer es crear / actualizar una lista para un tablero con un ID de tablero coincidente .

Aquí es donde estoy después de varios intentos:

func saveList(boardID: String, listName: String, listID: String) { let request = NSFetchRequest(entityName: "Board") var error: NSError? = nil request.predicate = NSPredicate(format: "boardID like %@", boardID) let results: NSArray = context.executeFetchRequest(request, error: &error) if results.count > 0 { for result in results { let board = result as Board let list = NSEntityDescription.insertNewObjectForEntityForName("List", inManagedObjectContext: context) as List println("💃 want to save /(listName) in /(board.boardName)") board.lists.addListObject(lists) list.listName = listName list.listID = listID } } }

Basándome en Definir relaciones de CoreData en Swift y this , intenté implementar la respuesta de @Keenle para definir objetos de lista dentro de un tablero:

import Foundation extension Board { func addListObject(value:List) { var items = self.mutableSetValueForKey("lists"); items.addObject(value) } func removeListObject(value:List) { var items = self.mutableSetValueForKey("lists"); items.removeObject(value) } }

Sin embargo, me encontré con el siguiente error en board.lists.addListObject(lists) : ''NSSet'' no tiene un miembro llamado ''addListObject''`

En lugar de board.lists.addListObject(lists) , también probé board.lists.listName = listName como se board.lists.listName = listName en este ejemplo de Obj-C , pero lamentablemente tampoco funcionó.

(Además, la salida de println está especificando correctamente el tablero y la lista correctos).

¡Gracias por adelantado!


En una relación uno a muchos, es más fácil establecer la dirección "uno a uno" de las relaciones inversas, en su caso solo

list.board = board

por lo que los métodos de extensión en realidad no son necesarios aquí.


Si define:

@NSManaged var lists: Set<List>

Entonces puedes hacer:

board.lists.insert(list)