3

在我的核心数据托管对象模型中,我有一个实体 Foo,它与名为 baz 的实体 Baz 具有一对多关系(具有一对多逆向)。Baz 有一个名为“tag”的字符串属性。当我使用[NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths:[NSArray arrayWithObject:@"baz.tag"] inEntityDescription:FooDescription]为 NSPredicateEditor 创建行编辑器时,结果包含(如预期的那样)一个行模板,如

[弹出:baz.tag] [弹出:包含|是|不是|...] [TextField]

当我从弹出窗口中选择“包含”时,带有谓词的查询按预期工作。如果我选择任何其他弹出窗口(例如“is”),我会收到以下错误:“此处不允许对多键”。我可以使用[NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths:inEntityDescription:]还是必须手动构建行编辑器?

4

1 回答 1

4

看起来自动生成的模板(使用[NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths:inEntityDescription:])无法生成正确的运算符。解决方案是使用手动创建模板[NSPredicateEditorRowTemplate initWithLeftExpressions:rightExpressionAttributeType:modifier:operators:options:]。对于给定的示例:

id template = [[NSPredicateEditorRowTemplate initWithLeftExpressions:[NSArray arrayWithObject:[NSExpression expressionForKeyPath:@"baz.tag"]] rightExpressionAttributeType:NSStringAttributeType modifier:NSAnyPredicateModifier operators:keywordOperators options:0];
于 2008-10-22T18:18:27.603 回答