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.

SwiftUI: Filtrar y obtener dinámicamente registros de CoreData mediante atributos.

Tengo registros guardados en mi modelo de datos, pero me preguntaba cómo podría filtrar y obtener datos de manera dinámica de acuerdo a los parámetros que paso, por ejemplo, mi modelo de datos es de tipo personas que incluye su nombre, edad y ocupación.

Digamos que deseo devolver 20 registros, pero cada registro puede variar ligeramente. Estos son mis parámetros, son estáticos:

Let’s say I wish to return 20 records, but each record can slightly vary. These are my parameters, they are static:

let ageParamters = [60, 24, 35, 64, 29, 39, 90, 92, 38, 48, 23, 58, 62, 78, 19, 18, 29, 48, 40]

Deseo obtener un único registro para una persona cuya edad coincida con el índice actual del arreglo, por lo que la primera persona tendrá 60 años, la siguiente 24, luego 35 y así sucesivamente.

Pero yendo más allá, ¿cómo podría filtrar mis datos observando dos campos como la edad y la ocupación de la siguiente manera:

let ageOccupationParamters = [[20: "Doctor"], [78: "Retired"], [32: "Police"]]

Agradecería cualquier ayuda que pueda obtener. Gracias de antemano.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para filtrar y obtener datos de forma dinámica basándose en los parámetros que se pasan, se puede utilizar NSPredicate para generar un filtro que obtenga los datos basándose en los criterios deseados.

    Por ejemplo, para obtener 20 registros de su modelo de datos donde cada registro coincida con una edad específica de la matriz ageParameters, se puede utilizar el siguiente código:

    let fetchRequest: NSFetchRequest<person> = Person.fetchRequest()
    let predicateFormat = "age == %@"
    fetchRequest.predicate = NSPredicate(format: predicateFormat, argumentArray: ageParameters.prefix(20))
    let results = try? context.fetch(fetchRequest)
    

    Esto crea una solicitud de obtención para su entidad Person, establece un predicado que filtra por edad y obtiene los primeros 20 registros que coinciden con una de las edades en la matriz ageParameters.

    Para ampliar esto y filtrar tanto por edad como por ocupación, se puede modificar el formato del predicado para incluir ambos campos:

    let fetchRequest: NSFetchRequest<person> = Person.fetchRequest()
    let predicateFormat = "age == %@ AND occupation == %@"
    var arguments = [Any]()
    for ageOccupation in ageOccupationParameters {
        if let age = ageOccupation.keys.first, let occupation = ageOccupation[age] {
            arguments.append(age)
            arguments.append(occupation)
        }
    }
    fetchRequest.predicate = NSPredicate(format: predicateFormat, argumentArray: arguments.prefix(20 * 2))
    let results = try? context.fetch(fetchRequest)
    

    Esto crea una solicitud de obtención que filtra tanto por edad como por ocupación, y construye la matriz de argumentos basándose en la matriz ageOccupationParameters. También obtiene los primeros 20 registros que coinciden con los criterios dados.

Comments are closed.