NSP предикатный запрос Подвиды UIView - PullRequest
2 голосов
/ 12 ноября 2010

Я пытаюсь управлять подпредставлениями в моем приложении. Я искал в Интернете и недавно встретил класс NSPredicate. Я проверил примеры, но застрял где-то здесь. если кто-то может помочь или исправить меня, я буду рад.

Я получил массив подпредставлений в классе UIView. Я могу получить этот массив с помощью этой команды, как все, что вы знаете: "self.subviews". Я хочу получить массив подпредставлений, позиция х которых больше, чем 2100, а код такой:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"frame.origin.x >= 2100.0"];
NSLog(@"%d", [[self.subviews filteredArrayUsingPredicate:predicate] count]);

но выдает ошибку вроде этого:

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<NSConcreteValue 0xef2a2f0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key origin.'

Ты можешь помочь?

Ответы [ 2 ]

5 голосов
/ 12 ноября 2010

Это не будет работать, потому что frame является struct, а не объектом, а origin является членом этой структуры. Вы не можете получить доступ к элементам структуры с помощью кодирования значения ключа.

Вы можете попробовать добавить категорию на UIView, чтобы добавить метод -(CGFloat)x в UIView, который возвращает позицию вида x. Формат предиката тогда будет просто @"x >= 2100".

0 голосов
/ 13 ноября 2010

Другой альтернативой может быть использование категории UIView для добавления метода -(CGFloat) frameOriginX, который просто возвращает [self frame].origin.x, а затем использование frameOriginX в качестве ключевого пути в предикате.

...