Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c Xcode 4中的NSPredicateEditor_Objective C_Cocoa_Macos_Xcode4_Nspredicateeditor - Fatal编程技术网

Objective c Xcode 4中的NSPredicateEditor

Objective c Xcode 4中的NSPredicateEditor,objective-c,cocoa,macos,xcode4,nspredicateeditor,Objective C,Cocoa,Macos,Xcode4,Nspredicateeditor,Xcode 4的谓词编辑器控件有点问题——我认为我做的一切都是对的,而且IDE本身似乎真的崩溃了 我正在编写一个应用程序,但为了将其隔离,我做了以下操作: 创建一个带有窗口的新项目。在XIB编辑器中,向其添加NSPredicateEditor,然后添加一行。将其保留为键路径/字符串,并添加两个键路径-“title”和“writer”。使其不区分大小写和变音 创建NSWindowController的子类,并为谓词编辑器添加IBOutlet 在awakeFromNib中,输入以下代码: NSPre

Xcode 4的谓词编辑器控件有点问题——我认为我做的一切都是对的,而且IDE本身似乎真的崩溃了

我正在编写一个应用程序,但为了将其隔离,我做了以下操作:

创建一个带有窗口的新项目。在XIB编辑器中,向其添加NSPredicateEditor,然后添加一行。将其保留为键路径/字符串,并添加两个键路径-“title”和“writer”。使其不区分大小写和变音

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

在awakeFromNib中,输入以下代码:

NSPredicate*myPredicate=[NSPredicate predicateWithFormat:@”(标题包含[CD]@)和(写入程序包含[CD]@),@“

[\u predicateEditor setObjectValue:myPredicate]

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

2011-04-12 15:59:37.709谓词测试[38419:903]警告-找不到与谓词标题包含[cd]匹配的模板。“

2011-04-12 15:59:37.710谓词测试[38419:903]警告-找不到与谓词编写器包含的[cd]匹配的模板。“

单击(+)按钮添加新行时,会得到以下结果:

2011-04-12 15:59:40.044谓词测试[38419:903]无法使用nil运算符或表达式创建比较谓词。

我认为我在这里没有做错什么,这应该行得通吗?如果我将谓词编辑器行模板从键路径更改为键路径,然后将其切换回键路径,并编辑键路径列表,那么Xcode会崩溃,并出现内部一致性异常,这让我认为Xcode 4在谓词编辑方面可能达不到要求


有人有什么想法吗?我尝试过用代码而不是XIB编辑器创建NSPredicateEditor,但没有结果。谓词编辑功能是阻碍我将应用程序发布到应用商店的所有因素,因此这有点麻烦。

我知道这不是您想要听到的答案,但我强烈建议以编程方式设置谓词编辑器。根据我的经验,在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]];

不幸的是,我不能再使用Xcode3的IB进行测试了

从这里找到的示例开始,我怀疑XCode4 IB有bug,因为通过IB在谓词编辑器中添加一个键路径,并在默认的_谓词中添加一个条目,会导致“警告-无法找到模板匹配谓词”。。 检查此示例以了解;)
似乎有已知的问题?也许我遗漏了一些东西。

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

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

“日期”>=演员阵容(344464706.878616,“NSDate”)

而不是:

日期>=演员阵容(344464706.878616,“NSDate”)


第一种样式出现在xCode 4中,第二种样式出现在xCode 3中。

辛苦地下载了xCode 3和IB,当我打开XIB时,关键路径丢失了。XCode4能否在NSPredicateEditorRowTemplates中正确保存关键路径?没问题-这实际上是一个坚如磐石的解决方案,尽管你是对的,但这并不是我想听到的。谢谢!啊哈,看来“日期”位被编码为一个常量,而不是一个键路径?