iphone - que - core data tutorial swift 4
Configurar un NSPredicate con múltiples condiciones (3)
Eventualmente pude resolver esto usando una subconsulta:
request.predicate = [NSPredicate predicateWithFormat:
@"(photosTookThere.@count !=0) AND SUBQUERY(photosTookThere, $Photo, $Photo.isFavourite==1).@count >0"
];
No estoy seguro de cómo se trataría de "poner en cascada" varias condiciones en un NSPredicate.
Soy bastante nuevo en Core Data y no estoy seguro si esa es la manera correcta de lograr lo que estoy buscando hacer.
Esto es lo que estoy tratando de hacer:
Hay un objeto Photo que tiene una relación whereTook con un objeto Location, que tiene un inverso de photosTookThere.
La Foto a su vez tiene un atributo NSNumber llamado isFavourite.
Me gustaría configurar una NSFetchRequest que primero verifique que photosTookThere exista y, de ser así, compruebe cada objeto de fotografía resultante y devuelva solo los que están configurados como favoritos.
Aquí está el código hasta ahora:
request.entity = [NSEntityDescription entityForName:@"Location" inManagedObjectContext:context];
request.sortDescriptors = [NSArray arrayWithObject[NSSortDescriptorsortDescriptorWithKey:@"locationId" ascending:YES]];
request.predicate = [NSPredicate predicateWithFormat:@"photosTookThere.@count != 0"];
¿Cómo podría poner en cascada la segunda condición en el predicado y devolver los resultados correctos?
Puede usar AND y OR en su predicado de forma muy parecida a como lo haría si estuviera especificando una condición "where" en una instrucción SQL. Para buscar un NULL, que parece que desea al comparar con "whereTook", puede compararlo con nil (whereTook = nil).
Simplemente ponga cada condición entre paréntesis y conéctelos con AND.
[NSPredicate predicateWithFormat:@"(photosTookThere.@count != 0) AND (isFavourite == %@)", [NSNumber numberWithBool:YES]];
También recomendaría cambiar el nombre de su relación "whereTook" a "ubicación", y su "photosTookThere" a simplemente "fotos", eso está más en línea con la convención.