NSSet из touchShouldBegin: из UIScrollView это только одна NSString - PullRequest
1 голос
/ 09 февраля 2012

У меня есть подкласс 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 ]

3 голосов
/ 09 февраля 2012

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

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

Попробуйте:

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

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

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

for (UITouch *element in touches)
{
    NSLog(@"element:%@", element);    
}
1 голос
/ 09 февраля 2012

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

...