maneira mais eficaz de pesquisar usando NSPredicate OR statement

Eu tentei construir um predicado em um post anterior, mas acabei fazendo assim porque depois de 3 horas, eu não consegui fazê-lo funcionar.

Eu sinto que tem que haver uma maneira mais eficaz, também preciso que os predicados sejam insensíveis a maiúsculas e minúsculas.

10.000 carros Eu tenho um pneu, roda, assento como três peças de carros Eu quero encontrar todos os carros que têm um pneu. ENTÃO quero encontrar todos os carros que tenham uma roda. ENTÃO quero encontrar todos os carros que tenham assento. (Eu sei que muitos serão duplicados, mas é o que eu preciso)

Por favor, deixe-me saber se existe uma maneira mais eficaz. Também, por favor, deixe-me saber como tornar os predicados insensíveis ao caso.

Agradeço antecipadamente!

-(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;
}

questionAnswers(2)

yourAnswerToTheQuestion