自动生成多对键谓词行模板?

发布于 2024-07-06 15:41:46 字数 537 浏览 6 评论 0原文

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

[弹出窗口:baz.tag] [弹出窗口:包含|是|不是|...] [文本字段]

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

In my Core Data managed object model, I have an entity Foo with a to-many relationship (with a to-many inverse) to entity Baz named baz. Baz has a string property named "tag". When I use [NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths:[NSArray arrayWithObject:@"baz.tag"] inEntityDescription:FooDescription] to create the row editors for an NSPredicateEditor, the result contains (as expected) a row template like

[Popup: baz.tag] [Popup: Contains|is|is not|...] [TextField]

When I select "Contains" from the popup, a query with the predicate works as expected. If I choose any of the other popups (e.g. "is"), I get the following error: "to-many key not allowed here". Can I use [NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths:inEntityDescription:] or do I have to build the row editor manually?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

断舍离 2024-07-13 15:41:46

看起来自动生成的模板(使用 [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];

It looks like the automatically generated template (using [NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths:inEntityDescription:]) cannot produce the correct operators. The solution is to create the template manually using [NSPredicateEditorRowTemplate initWithLeftExpressions:rightExpressionAttributeType:modifier:operators:options:]. For the given example:

id template = [[NSPredicateEditorRowTemplate initWithLeftExpressions:[NSArray arrayWithObject:[NSExpression expressionForKeyPath:@"baz.tag"]] rightExpressionAttributeType:NSStringAttributeType modifier:NSAnyPredicateModifier operators:keywordOperators options:0];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文