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,而且没完没了地乱搞也没有用。谓词编辑功能是阻止我向商店发布应用程序的唯一原因,所以这有点烦人。
发布于 2011-04-13 03:05:15
我知道这不是您想听到的答案,但我强烈建议以编程方式设置谓词编辑器。根据我的经验,在IB中设置它并不是很直观。至少在代码中,您可以显式地看到正在发生的事情。
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]];发布于 2011-12-05 20:45:50
它似乎确实是xCode 4中的一个bug。当您记录由predicateEditor形成的谓词时,您将看到它听起来
"date“>= CAST(344464706.878616,"NSDate")
而不是:
date >= CAST(344464706.878616,"NSDate")
第一种样式出现在xCode 4中,而后者出现在xCode 3中。
发布于 2011-04-18 00:37:22
对于XCode 4和NSPredicateEditor,我也有同样的问题,所以不仅仅是你。我能够在XCode 3中打开我的代码,删除IB中的绑定并重新分配绑定,并且它正常工作。这与XCode 4设置绑定的方式有关--它似乎是错误的。如果XCode 3不是一个选项,以编程方式设置它可能是最好的解决方案。
https://stackoverflow.com/questions/5642681
复制相似问题