首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xcode 4中的NSPredicateEditor

Xcode 4中的NSPredicateEditor
EN

Stack Overflow用户
提问于 2011-04-12 23:10:08
回答 4查看 2.7K关注 0票数 7

Xcode 4的谓词编辑器控件有点问题--我认为我做得很好,而且IDE本身似乎已经崩溃了。

我在一个我正在编写的应用程序中发布了这个问题,但是为了隔离它,我做了以下工作:

创建一个带有窗口的新项目。在XIB编辑器中,向其中添加一个NSPredicateEditor,并添加一行。保留它为键路径/字符串,并添加两个关键路径-“标题”和“写入器”。让它更有表现力,而且不敏感。

创建一个NSWindowController子类,并为谓词编辑器添加一个IBOutlet。

在awakeFromNib中,放置以下代码:

NSPredicate *myPredicate = [NSPredicate predicateWithFormat:@“(标题CONTAINSCD %@)和(作者CONTAINSCD %@)",@"",@”“;

_predicateEditor setObjectValue:myPredicate;

这将在控制台中产生以下结果:

2011-04-12 15:59:37.709 PredicateTest38419:903警告-无法找到模板匹配谓词标题CONTAINScd“

2011-04-12 15:59:37.710 PredicateTest38419:903警告-无法找到模板匹配的谓词编写器CONTAINScd“

当我单击(+)按钮添加一个新行时,会得到以下内容:

2011-04-12 15:59:40.044 PredicateTest38419:903不能创建带有零运算符或表达式的比较谓词。

我认为我没有做错什么,这应该有效吗?如果我将谓词编辑器行模板从键路径中移开,然后将其切换回键路径,并编辑键路径列表,则Xcode会以内部一致性异常崩溃,这使我认为,在谓词编辑方面,Xcode 4可能不够格。

有人有什么想法吗?我尝试过用代码而不是XIB编辑器来创建一个NSPredicateEditor,而且没完没了地乱搞也没有用。谓词编辑功能是阻止我向商店发布应用程序的唯一原因,所以这有点烦人。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-13 03:05:15

我知道这不是您想听到的答案,但我强烈建议以编程方式设置谓词编辑器。根据我的经验,在IB中设置它并不是很直观。至少在代码中,您可以显式地看到正在发生的事情。

代码语言:javascript
复制
NSArray *keyPaths = @[[NSExpression expressionForKeyPath:@"title"],
                      [NSExpression expressionForKeyPath:@"writer"]];
NSArray *operators = @[@(NSEqualToPredicateOperatorType),
                       @(NSNotEqualToPredicateOperatorType),
                       @(NSBeginsWithPredicateOperatorType),
                       @(NSEndsWithPredicateOperatorType),
                       @(NSContainsPredicateOperatorType)];

NSPredicateEditorRowTemplate *template = [[NSPredicateEditorRowTemplate alloc] initWithLeftExpressions:keyPaths
                                                                          rightExpressionAttributeType:NSStringAttributeType
                                                                                              modifier:NSDirectPredicateModifier 
                                                                                             operators:operators 
                                                                                               options:(NSCaseInsensitivePredicateOption | NSDiacriticInsensitivePredicateOption)];

NSArray *compoundTypes = @[@(NSNotPredicateType),
                           @(NSAndPredicateType),
                           @(NSOrPredicateType)];
NSPredicateEditorRowTemplate *compound = [[NSPredicateEditorRowTemplate alloc] initWithCompoundTypes:compoundTypes];

[myPredicateEditor setRowTemplates:@[template, compound]];
票数 13
EN

Stack Overflow用户

发布于 2011-12-05 20:45:50

它似乎确实是xCode 4中的一个bug。当您记录由predicateEditor形成的谓词时,您将看到它听起来

"date“>= CAST(344464706.878616,"NSDate")

而不是:

date >= CAST(344464706.878616,"NSDate")

第一种样式出现在xCode 4中,而后者出现在xCode 3中。

票数 3
EN

Stack Overflow用户

发布于 2011-04-18 00:37:22

对于XCode 4和NSPredicateEditor,我也有同样的问题,所以不仅仅是你。我能够在XCode 3中打开我的代码,删除IB中的绑定并重新分配绑定,并且它正常工作。这与XCode 4设置绑定的方式有关--它似乎是错误的。如果XCode 3不是一个选项,以编程方式设置它可能是最好的解决方案。

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

https://stackoverflow.com/questions/5642681

复制
相关文章

相似问题

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