Вы должны взглянуть на синтаксис предикатов для подзапросов. Вы не можете использовать обычное ЛЮБОЕ ключевое слово, так как это позволяет сопоставлять только один столбец, а не два одновременно.
NSString *keyValue = @"title";
NSString *valueValue = @"home";
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Page" inManagedObjectContext:_context]];
[request setPredicate:[NSPredicate predicateWithFormat:@"(SUBQUERY(attributes, $a, $a.key == %@ && $a.value == %@).@count != 0)", keyValue, valueValue]];
Более простой предикат ANY attributes.key = "title" AND ANY attributes.value = "home"
не будет работать, так как он также возвращает страницы с двумя диктовками, например, key = 'addr' / value = 'home' и key = 'title' / value = 'pete'.