NSSet из touchShouldBegin: из UIScrollView это только одна NSString

У меня есть подкласс UIScrollView, это также делегат.

Когда у меня есть следующая функция протокола называется:

- (BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view
{
id  element;
NSEnumerator *setEnum =   [touches objectEnumerator];

while ((element = [setEnum nextObject]) != nil)
{
    NSLog(@"element:%@", element);    
}

return [super touchesShouldBegin:touches withEvent:event inContentView:view];
}

Единственное, что показывает NSLog:

element:<UITouch: 0x15a9a0> phase: Ended tap count: 3 window: <UIWindow: 0x392390; frame = (0 0; 320 480); layer = <UIWindowLayer: 0x382cd0>> view: <UIButton: 0x3a5e90; frame = (0 0; 106 138); opaque = NO; layer = <CALayer: 0x3a3e90>> location in window: {228, 126} previous location in window: {227, 126} location in view: {89.6667, 77} previous location in view: {88.3333, 77}

Проблема в том, что он показывает содержимое NSSet как одну большую строку NSString. Если я спрашиваю у объекта objectEnumerator все объекты, я просто получаю один объект в NSArray. Точно такой же объект (NSString), как NSLog показывает.

Может ли кто-нибудь сказать мне, если я делаю что-то не так, или если это не нормально, что NSSet просто дает одну строку NSString.

Спасибо!

2 ответа

Решение

NSLog() вывод является результатом description метод вызывается на объекте. NSLog() Выход предназначен для чтения человеком только для отладки.

<UITouch: 0x15a9a0> указывает на то, что объект является UITouch по адресу 0x15a9a0. Остальная часть описания просто отображает некоторые интересные значения UITouch,

Пытаться:

NSLog(@"tap count:%d", element.count);

и т.д., и вы увидите, что это не просто строка.

Кроме того, нет необходимости в явном NSEnumeratorможно использовать быстрое перечисление: вы можете упростить код до:

for (UITouch *element in touches)
{
    NSLog(@"element:%@", element);    
}

NSSet касается набора экземпляров UITouch, а не NSStrings. Когда вы отправляете его в NSLog, он вызывает метод "description" экземпляра UITouch, который возвращает NSString.

Другие вопросы по тегам