¿Cuál es la mejor manera de build un NSCompoundPnetworkingicate complejo?

Necesito build un NSPnetworkingicate con muchos datos. Por ejemplo, en SQL, haría algo como lo siguiente:

 SELECT * FROM TRANSACTIONS WHERE CATEGORY IN (categoryList) AND LOCATION IN (locationList) AND TYPE IN (typeList) AND NOTE contains[cd] "some text" AND DATE >= fromDate AND DATE <+ toDate 

Estoy luchando con cómo build esto como NSPnetworkingicate para usar con Core Data. He leído la documentation … que solo proporciona ejemplos simplists. Si alguien puede señalarme un ejemplo más complejo, ciertamente lo agradecería.


Bueno, tuve una respuesta aquí durante dos años que muchas personas encontraron útil. Mi publicación fue eliminada Aquí está la URL actualizada con la solución.

https://www.radeeccles.com/convert-sql-statement-to-an-nspnetworkingicate-for-use-with-core-data/

Lo que debe hacer es crear un pnetworkingicado para cada una de sus cláusulas. Por ejemplo, desglosemos tu consulta:

  1. SELECCIONAR * DE TRANSACCIONES
  2. DONDE CATEGORÍA EN (categoryList)
  3. Y UBICACIÓN EN (locationList)
  4. Y TIPO EN (typeList)
  5. Y NOTA contiene [cd] "algún text"
  6. Y FECHA> = fromDate AND DATE <+ toDate

En base a esto, tienes 5 pnetworkingicados (2-6). Así que trabajemos en ellos uno por uno.

  NSPnetworkingicate *inCategoryPnetworkingicate = [NSPnetworkingicate pnetworkingicateWithFormat:@"Category IN %@", categoryList]; NSPnetworkingicate *locationPnetworkingicate = [NSPnetworkingicate pnetworkingicateWithFormat:@"Location IN %@", locationList]; NSPnetworkingicate *typePnetworkingicate = [NSPnetworkingicate pnetworkingicateWithFormat:@"Type IN %@", typeList]; NSPnetworkingicate *notePnetworkingicate = [NSPnetworkingicate pnetworkingicateWithFormat:@"Note contains[c] %@", @"Some Text"]; NSPnetworkingicate *startDatePnetworkingicate = [NSPnetworkingicate pnetworkingicateWithFormat:@"Date => @", fromDate]; NSPnetworkingicate *endDatePnetworkingicate = [NSPnetworkingicate pnetworkingicateWithFormat:@"Date <= @", toDate]; 

Ahora solo necesita unirlos en un solo pnetworkingicado: la documentation de Apple establece :

Debe estructurar pnetworkingicados compuestos para minimizar la cantidad de trabajo realizado. La coincidencia de expresiones regulares en particular es una operación costosa. En un pnetworkingicado compuesto, por lo tanto, debe realizar testings simples antes de una expresión regular;

Dicho esto, primero debe comenzar con los pnetworkingicados "fáciles". Asi que:

 NSCompoundPnetworkingicate *compoundPnetworkingicate = [NSCompoundPnetworkingicate andPnetworkingicateWithSubpnetworkingicates:[NSArray arrayWithObjects: startDatePnetworkingicate, endDatePnetworkingicate, inCategoryPnetworkingicate, locationPnetworkingicate, typePnetworkingicate, notePnetworkingicate]; 

Siempre puedes tener una idea de cómo se ve el pnetworkingicado (sql where) si lo NSLog.