es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Almacenar las puntuaciones del líder en CoreData?

Estoy intentando almacenar un marcador en Core Data (con eventual funcionalidad de CloudKit) en mi aplicación y estaba confundido acerca de cómo hacerlo de la mejor manera.

El usuario podrá crear y guardar varios marcadores. Cada marcador tendrá una fecha de creación, nombre, ID y también todas las puntuaciones para ese marcador. En el modelo de Core Data (abajo), agregué todas esas cosas como atributos a la entidad de marcador y para el atributo de puntuación, lo dejé como no definido. Estaba pensando en convertirlo en una matriz de mi estructura de “puntuación”. Sin embargo, cuando trato de hacer, “newLearboard.scores = Score” en mi archivo de “Persistence.swift”, se me dice que necesito agregar la puntuación como “NSObject”. ¿Es esta la forma correcta de hacerlo o creará consecuencias no deseadas cuando intente agregar/mostrar el marcador de las puntuaciones?

Puntuación es una estructura con varios campos como nombre y valor, etc.

También podría convertir la matriz de Puntuaciones a un “OrderedSet” del paquete de colecciones de Swift eventualmente. ¿Esto creará otros problemas?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para guardar un marcador en CoreData (con eventual funcionalidad de CloudKit), puedes crear una entidad llamada “Leaderboard” y agregar los siguientes atributos: fecha de creación (Date), nombre (String), ID (String) y un atributo no definido para puntuaciones.

    Dado que un marcador puede tener múltiples puntuaciones, una forma de abordar esto es hacer que el atributo de puntuación sea una matriz de la estructura Score. Esto se puede hacer definiendo la estructura Score en tu código y luego agregando un nuevo atributo a la entidad Leaderboard de tipo “Transformable” y configurando su clase personalizada como Score.

    En tu archivo Persistence.swift, puedes crear un nuevo marcador y sus puntuaciones asociadas usando el siguiente código:

    `swift
    let newLeaderboard = Leaderboard(context: persistentContainer.viewContext)
    newLeaderboard.creationDate = Date()
    newLeaderboard.name = "Mi Marcador"
    newLeaderboard.id = "1234"
    newLeaderboard.scores = [Puntuación(nombre: "Jugador 1", valor: 100), Puntuación(nombre: "Jugador 2", valor: 200)] como NSObject
    `

    Ten en cuenta que debes convertir la matriz de Puntuación como NSObject para guardarla en CoreData. Esto no debería crear ninguna consecuencia no deseada al agregar o mostrar las puntuaciones del marcador.

    Si planeas convertir la matriz de Puntuación a un OrderedSet del paquete Swift Collections, debes definir una nueva subclase de NSSet en tu código para usar como clase personalizada para el atributo “Transformable”. Esto asegurará que las puntuaciones se almacenen en el orden correcto y no crearán otros problemas.

Comments are closed.