La forma más efectiva de buscar usando la instrucción NSPredicate OR

Intenté construir un predicado en una publicación anterior, pero terminé haciéndolo de esta manera porque después de 3 horas, no pude hacerlo funcionar.

Siento que tiene que haber una forma más efectiva, también necesito que los predicados sean sensibles a las mayúsculas y minúsculas.

10,000 autos Tengo un neumático, una rueda, un asiento como tres partes de un auto. Quiero encontrar todos los autos que tengan un neumático. ENTONCES quiero encontrar todos los coches que tengan una rueda. ENTONCES quiero encontrar todos los coches que tengan asiento. (Sé que muchos serán duplicados, pero eso es lo que necesito)

Por favor, hágamelo saber si hay una manera más eficaz. También, por favor, hágame saber cómo hacer que los predicados sean insensibles a mayúsculas

¡Gracias de antemano!

-(NSArray*) loadCarsFromCoreData:(NSMutableArray*)inputCarParts{

    NSMutableArray *totalResults=[[NSMutableArray alloc]init];
    NSFetchRequest *fetchRequest =[[NSFetchRequest alloc]init];

    //To find the cars we are using the car parts
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"CarParts" inManagedObjectContext:[self managedObjectContext]];
    [fetchRequest setEntity:entity];
    NSError *error;
    NSMutableArray *predicates =[self parseCarPartsIntoAPredicateArray:inputCarParts];
    for (int i=0; i<[predicates count]; i++) {
        [fetchRequest setPredicate:[predicates objectAtIndex:i]];

        NSArray *records = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error];
        NSLog(@"results = %i",[records count]);
        [totalResults addObjectsFromArray:records];
    }
    NSLog(@"results = %i",[totalResults count]);
    return [NSArray arrayWithArray:totalResults];
}

-(NSMutableArray*)parseCarPartsIntoAPredicateArray:(NSMutableArray*)inputCarParts{
    NSMutableArray *returnArray=[[NSMutableArray alloc]init];
    for (int i=0; i<[inputCarParts count]; i++) {
        NSPredicate *predicate=[NSPredicate predicateWithFormat:@"partName == %@",[inputCarParts objectAtIndex:i]];
        [returnArray addObject:predicate];
    }

    return returnArray;
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta