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.