CoreDataエンティティの述語エディターテンプレートを生成しようとしています。私のコードには次のものがあります:
NSEntityDescription *descrip = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:managedObjectContext];
NSArray *templates = [NSPredicateEditorRowTemplate templatesWithAttributeKeyPaths:[NSArray arrayWithObjects:@"name", @"age", nil] inEntityDescription:descrip];
[ibPredicateEditor setRowTemplates: templates];
NSPredicate *p = [NSPredicate predicateWithFormat:@"name like 'John'"];
[ibPredicateEditor setObjectValue:p];
テンプレート配列の内容を印刷すると、次のようになります。
CFArray 0x1002d7400 [0x7fff70ff5f20] {タイプ=不変、カウント= 2、値=(0:NSPredicateEditorRowTemplate 0x10025c090:[名前] [99、4、5、8、9] NSStringAttributeType 1:NSPredicateEditorRowTemplate 0x1002d2dc0:[年齢] [4、5、 0、2、1、3] NSInteger16AttributeType)}
このコードを実行すると、コンソールに次のように表示されます。
Warning - unable to find template matching predicate name LIKE "John"
これを行うためのインターフェースは非常に単純に見えるので、私が間違っていることを理解できないようです。どんな助けでも大歓迎です!
編集
私の元々の問題は、テンプレートがLIKE演算子をサポートしていないときにLIKE演算子を使用していたことでした。ただし、複合述語をエディターに渡すときに同様の警告が表示される理由については混乱しています。
NSPredicate *p = [NSPredicate predicateWithFormat:@"name CONTAINS 'John'"];
NSPredicate *p2 = [NSPredicate predicateWithFormat:@"name CONTAINS 'Jo'"];
NSPredicate *final = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:p, p2, nil]];
[ibPredicateEditor setObjectValue: final];
また
NSPredicate *final = [NSCompoundPredicate orPredicateWithSubpredicates:[NSArray arrayWithObjects:p, p2, nil]];
[ibPredicateEditor setObjectValue: final];
これらは両方とも、私の最初の問題と同様の警告を生成します。ただし、単一の述語を使用して複合語と述語を作成できるのは奇妙だと思いますが、事前に作成された複合語と述語をエディターに渡すことはできません。