首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NSPredicateEditor编辑NSPredicate

使用NSPredicateEditor编辑NSPredicate
EN

Stack Overflow用户
提问于 2009-08-12 21:18:14
回答 1查看 2.2K关注 0票数 2

我可以使用NSPredicateEditor (NSRuleEditor的子类)轻松地创建一个NSPredicate。我想知道的是:

如何获取现有的NSPredicate (由编辑器创建)并将其重新加载到编辑器中,以便对其进行更改?

编辑:我试过@John建议的使用setObjectValue:,但效果不是很好。让我再解释一下我的设置:

我有一个基于文档的可可应用程序,文档窗口上只有一个NSPredicateEditor。在dataOfType:error:方法中,我有:

代码语言:javascript
复制
NSPredicate * pred = [predicateEditor objectValue];
NSData * predicateData = [NSKeyedArchiver archivedDataWithRootObject:pred];
return predicateData;

readFromData:ofType:error:方法中,我有:

代码语言:javascript
复制
NSPredicate * pred = [NSKeyedUnarchiver unarchiveObjectWithData:data];
[predicateEditor setObjectValue:pred];
return (pred != nil);

我已经验证了该谓词已正确存档和未存档,但在打开已保存的谓词之后,该谓词并未加载到predicateEditor中。(是的,predicateEditor是作为IBOutlet连接的)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-08-12 21:25:12

NSPredicateEditorobjectValue属性设置为有问题的谓词。

documentation对加载过程有这样的描述;这可能会导致您的设置出现问题吗?

首先,创建一个NSPredicateEditor实例,并在其上设置一些行模板-通过nib文件或以编程方式设置。谓词编辑器所做的第一件事就是使用templateViews向每个模板请求它们的视图。

在设置谓词编辑器之后,通常会向其发送一条setObjectValue:消息,以恢复保存的谓词。NSPredicateEditor需要确定它的哪个模板应该在谓词树中显示每个谓词。它通过向每个行模板发送matchForPredicate: message并选择返回最高值的行模板来实现这一点。

在找到谓词的最佳匹配之后,NSPredicateEditor复制该模板以获得新的视图,将它们插入到适当的行中,然后使用setPredicate:在模板上设置谓词。在该方法中,NSPredicateEditorRowTemplate对象必须设置其视图的值来表示该谓词。

接下来,NSPredicateEditorRowTemplate通过发送displayableSubpredicatesOfPredicate:消息向模板请求谓词的“可显示子谓词”。如果模板完整地表示了一个谓词,或者该谓词没有子谓词,那么它可以为此返回nil。否则,它应该返回一个谓词列表,这些谓词将被放入该模板行的子行中。对每个子谓词重复整个过程。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1268774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档