Я пытаюсь сгенерировать шаблоны редактора предикатов для моих сущностей базовых данных. В моем коде у меня есть следующее:
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"
Интерфейс для этого выглядит предельно простым, поэтому я не могу понять, что я делаю неправильно. Любая помощь будет принята с благодарностью!
EDIT
Моя первоначальная проблема заключалась в том, что я использовал оператор 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];
OR
NSPredicate *final = [NSCompoundPredicate orPredicateWithSubpredicates:[NSArray arrayWithObjects:p, p2, nil]];
[ibPredicateEditor setObjectValue: final];
Оба они выдают подобные предупреждения, как и моя первая проблема. Тем не менее, мне кажется странным, что я могу использовать один предикат и создать составной элемент и предикат, но я не могу передать предварительно созданный составной элемент и предикат в редактор.