visual studio microsoft español descargar community ios sqlite core-data native-sql

ios - microsoft - visual studio installer



Escribir SQL nativo en Core Data (3)

Necesito escribir una consulta SQL nativa mientras uso Core Data en mi proyecto. Realmente necesito hacerlo, ya que estoy usando NSPredicate ahora mismo y no es lo suficientemente eficiente (en un solo caso). Solo necesito escribir un par de subconsultas y combinaciones para buscar un gran número de filas y ordenarlas por un campo especial. En particular, necesito ordenarlo por la suma de valores de sus hijos-entites. Ahora mismo estoy buscando todo usando NSPredicate y luego estoy ordenando mi resultado (matriz) manualmente, pero esto lleva demasiado tiempo ya que hay muchos miles de resultados.

Corrígeme si me equivoco, pero estoy bastante seguro de que no puede ser un gran desafío, ya que hay una forma de usar sqlite en las aplicaciones de iOS.

Sería increíble si alguien pudiera guiarme en la dirección correcta. Gracias por adelantado.

EDITAR: Déjame explicarte lo que estoy haciendo. Aquí está mi modelo de Coredata:

Y así es como se ve mi resultado en el iPad:

Estoy mostrando una tabla con una fila por cliente, donde cada cliente tiene una cantidad de ventas que hizo de enero a junio de 2012 (último) Y 2013 (Curr). Al lado del Curr está la varianza entre esos dos valores. Lo mismo para el margen bruto y la proporción de cobertura.

Cada cliente se guarda en la tabla de Kunde y cada Kunde tiene un par de PbsRow . PbsRow realmente contiene la suma de las cantidades de ventas por mes.

Entonces, lo que estoy haciendo para mostrar estos resultados, es obtener todos los PbsRows entre enero y junio de 2013 y luego hacer esto:

self.kunden = [NSMutableOrderedSet orderedSetWithArray:[pbsRows valueForKeyPath:@"kunde"]];

Ahora tengo todos los clientes (Kunde) que tienen registros entre enero y junio de 2013. Luego estoy usando un bucle for para calcular la suma para cada cliente individual.

La idea es obtener las cantidades de ventas del año actual y compararlas con el año pasado. Lo malo es que hay una gran cantidad de clientes y el bucle- for solo lleva mucho tiempo :-(


Esto es un truco, pero ... La biblioteca SQLite es capaz de abrir más de un archivo de base de datos en un momento dado. Sería bastante factible abrir el archivo de base de datos básicos (solo lectura / uso) directamente con SQLite y abrir un segundo archivo junto con esto (informes / tablas temporales). Uno podría entonces ejecutar consultas SQL directas sobre los datos en la base de datos principal y persistir en un segundo archivo (si se necesita persistencia).

He hecho este tipo de cosas un par de veces. Hay funciones disponibles en la biblioteca SQLite (por ejemplo, motor de búsqueda de texto completo) que no están expuestas a través de Core Data.


Respuesta corta: no puedes hacer esto.

Respuesta larga: Core Data no es una base de datos per se - no se garantiza que tenga respaldo relacional alguno , y mucho menos una versión específica de SQLite contra la que pueda consultar. Además, ir de un lado a otro en los archivos de la tienda persistente de Core Data es una receta para el desastre, especialmente si Apple decide cambiar el formato de ese archivo de alguna manera. En su lugar, debe tratar de encontrar mejores formas de optimizar su uso de NSPredicate o comenzar a almacenar en la memoria caché los valores que se preocupan por usted.

¿Ha considerado usar los operadores de la colección KVC? Por ejemplo, si tienes una entidad Foo cada una con un grupo de Bar de niños, y esas Bar tienen un valor entero de Baz , creo que puedes obtener la suma de las de cada Foo haciendo algo como:

[email protected]

No estoy seguro si estos son aplicables a los predicados, pero vale la pena investigar .