De acuerdo con Core Data Documentation, no debe seguir buscando para ver si existen objetos.
There are many situations where you may need to find existing objects (objects already saved in a store) for a set of discrete input values. A simple solution is to create a loop, then for each value in turn execute a fetch to determine whether there is a matching persisted object and so on. This pattern does not scale well. If you profile your application with this pattern, you typically find the fetch to be one of the more expensive operations in the loop (compared to just iterating over a collection of items). Even worse, this pattern turns an O(n) problem into an O(n^2) problem.
Edición 16 de de marzo de:
No soy un experto en db, pero ya que la gente está pidiendo una solución más eficiente, tenga en cuenta este conjunto:
set1 = [apple, orange, banana, pineapple, lettuce]
Queremos averiguar si [mango, apple, grape]
es una parte de este conjunto.
Los documentos nos dicen que no debemos iterar a través de [mango, manzana, uva] y consultar la base de datos buscando cada elemento por turno porque es lento.
considerar esta solución:
Hash los conjuntos a nivel de servidor:
hash([mango, apple, grape]) = 234095dda321affe...
Puede entonces derivación del núcleo de datos por completo al pedir el servidor si algo cambiado. Si los conjuntos son diferentes, puede volcar los objetos en un contexto de objeto administrado y realizar un guardado masivo.
Si realmente desea ver si cada objeto a su vez forma parte del conjunto, puede hacer una búsqueda basada en una característica indexada, como "fruta con piel".
como se menciona en @Jon, la documentación oficial de Apple Core Data tiene un [capítulo] (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdImporting.html#// apple_ref/doc/uid/TP40003174-SW4) llamado 'Implementación de Find-or-Create Efficiently' que se pasa por alto fácilmente y detalla varias estrategias para reducir la huella de memoria. – ssc