¿Plantillas de filas de predicados generadas automáticamente para clave múltiple?
-
03-07-2019 - |
Pregunta
En mi modelo de objeto gestionado de Core Data, tengo una entidad Foo con una relación de muchos a muchos (con un inverso de muchos a muchos) a la entidad Baz llamada baz. Baz tiene una propiedad de cadena llamada " tag " ;. Cuando uso [NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths: [NSArray arrayWithObject: @ " baz.tag "] inEntityDescription: FooDescription]
para crear los editores de fila para un NSPredicateEditor, el resultado contiene una plantilla de fila (como se esperaba)
[Ventana emergente: baz.tag] [Ventana emergente: Contiene | es | no es | ...] [TextField]
Cuando selecciono " Contiene " desde la ventana emergente, una consulta con el predicado funciona como se esperaba. Si elijo cualquiera de las otras ventanas emergentes (p. Ej., & Quot; es "), aparece el siguiente error: la clave '' to-many no está permitida aquí ''. ¿Puedo usar [NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths: inEntityDescription:]
o tengo que construir el editor de filas manualmente?
Solución
Parece que la plantilla generada automáticamente (usando [NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths: inEntityDescription:]
) no puede producir los operadores correctos. La solución es crear la plantilla manualmente usando [NSPredicateEditorRowTemplate initWithLeftExpressions: rightExpressionAttributeType: modificador: operadores: opciones:]
. Para el ejemplo dado:
id template = [[NSPredicateEditorRowTemplate initWithLeftExpressions:[NSArray arrayWithObject:[NSExpression expressionForKeyPath:@"baz.tag"]] rightExpressionAttributeType:NSStringAttributeType modifier:NSAnyPredicateModifier operators:keywordOperators options:0];