NSPredicateEditor в Xcode 4 - PullRequest
       29

NSPredicateEditor в Xcode 4

6 голосов
/ 13 апреля 2011

Немного проблем с элементами управления редактора предикатов Xcode 4 - я думаю, что я все делаю правильно, и кажется, что сама среда IDE отключена.

У меня возникла эта проблема в приложении IПишу, но чтобы изолировать его, я сделал следующее:

Создайте новый проект с окном.В редакторе XIB добавьте к нему NSPredicateEditor и добавьте одну строку.Оставьте его как ключевые пути / строки и добавьте два ключевых пути - «заголовок» и «писатель».Сделайте его регистронезависимым и нечувствительным.

Создайте подкласс NSWindowController и добавьте IBOutlet для редактора предикатов.

В awakeFromNib вставьте следующий код:

NSPredicate * myPredicate = [NSPredicate ultimateateWithFormat: @ "(заголовок содержит [CD]% @) И (писатель содержит [CD]% @)", @ "", @ ""];

[_ateateEditor setObjectValue: _myPredicate];

В консоли выдается следующее:

2011-04-12 15: 59: 37.709 PredicateTest [38419: 903] Предупреждение - невозможно найтизаголовок предиката сопоставления с шаблоном CONTAINS [cd] ""

2011-04-12 15: 59: 37.710 PredicateTest [38419: 903] Предупреждение - не удается найти средство сопоставления предикатов сопоставления с шаблоном CONTAINS [cd] ""

Когда я нажимаю кнопку (+), чтобы добавить новую строку, я получаю следующее:

2011-04-12 15: 59: 40.044PredicateTest [38419: 903] Невозможно создать предикат сравнения с оператором или выражением nil.

Am I rigДумая, я не делаю ничего плохого здесь, и это должно работать?Если я изменю шаблон строки редактора предикатов в сторону от ключевых путей, затем переключу его обратно на ключевые пути и отредактирую список ключевых путей, Xcode вылетает с исключением из-за внутренней согласованности, что заставляет меня думать, что Xcode 4 не может работать, когдаречь идет о редактировании предикатов.

У кого-нибудь есть идеи?Я пытался создать NSPredicateEditor в коде, а не в редакторе XIB, и без конца возился безрезультатно.Функциональность редактирования предикатов - это все, что меня удерживает, когда я выпускаю приложение в магазин, так что это немного раздражает.

Ответы [ 4 ]

11 голосов
/ 13 апреля 2011

Я знаю, что это не тот ответ, который вы хотите услышать, но я очень рекомендую настроить редактор предикатов программно Настройка в 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]];
3 голосов
/ 06 декабря 2011

Кажется, это действительно ошибка в xCode 4. Когда вы зарегистрируете предикат, сформированный предикатом предиката, вы увидите, что он звучит

"дата"> = CAST (344464706.878616, "NSDate")

вместо:

дата> = CAST (344464706.878616, «NSDate»)

Первый стиль встречается в xCode 4, а последний в xCode 3.

1 голос
/ 18 апреля 2011

У меня такая же проблема с XCode 4 и NSPredicateEditor, так что это не только вы. Я смог открыть свой код в XCode 3, удалить привязки в IB и переназначить привязки, и все заработало нормально. Это как-то связано с тем, как XCode 4 устанавливает привязки - похоже, глючит. Программная установка, вероятно, является лучшим ответом, если XCode 3 не является опцией.

0 голосов
/ 15 апреля 2011

работает с той же проблемой с XCode4, к сожалению, я не могу больше тестировать с IB Xcode3.

Начиная с примера, найденного здесь http://nvie.com/posts/nspredicateeditor-tutorial/ я подозреваю, что в XCode4 IB есть ошибки, потому чтодобавление ключевого пути в редакторе предикатов через IB и добавление записи в DEFAULT_PREDICATE приводит к «Предупреждение - невозможно найти предикат соответствия шаблону». Проверьте этот пример, чтобы понять;) Кажется, есть известная проблема?Может быть, я что-то упустил ..

...