2014-08-17 3 views
0

Следующий код не петля:Для цикла не будет выполнять

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    NSLog(@"Inside method, before for loop"); 

    NSLog(@"dayBarArray.count = %lu", (unsigned long)dayBarArray.count); 

    for (int i = 0; i < dayBarArray.count; i++) //*** I've tried it this way 

// for (DayChartBar *bar in dayBarArray) //*** I've tried it this way 
    { 
     NSLog(@"Inside for loop"); 

     DayChartBar *bar = [dayBarArray objectAtIndex:i]; 

     UIView *thisLabel = [self.scroller viewWithTag:(bar.tag + 100)]; 

     CGRect visibleRect; 
     visibleRect.origin = self.scroller.frame.origin; 
     visibleRect.size = self.scroller.bounds.size; 

     NSLog(@"bar.frame = %@",NSStringFromCGRect(bar.frame)); 
     NSLog(@"visibleRect.frame = %@",NSStringFromCGRect(visibleRect)); 

     if (CGRectIntersectsRect(visibleRect,bar.frame)) 
     { 
      NSLog(@"Inside if statement"); 

      CGRect intersection = CGRectIntersection(visibleRect,bar.frame); 
      NSLog(@"bar.Frame is %@",NSStringFromCGRect(bar.frame)); 

      thisLabel.center = CGPointMake((thisLabel.center.x), CGRectGetMidY(intersection)); 
     } 

     else 
     { 
      thisLabel.center = thisLabel.center; 
      NSLog(@"Inside else statement"); 
     } 
    } 
    NSLog(@"Still inside method, after for loop"); 

} 

Вот результаты стратегически NSLog заявления:

2014-08-17 10:07:37.221 WMDGx[54442:90b] Inside method, before for loop 
2014-08-17 10:07:37.222 WMDGx[54442:90b] dayBarArray.count = 0 
2014-08-17 10:07:37.223 WMDGx[54442:90b] Still inside method, after for loop 

Как вы можете видеть, у меня есть попробовал как традиционный for loop, так и быстрый перечисление. Ничего не выполнит. Как указывает NSLogs, я вхожу в метод, но пропускаю цикл, независимо от подхода, который я сделал.

Я уверен, что написал хороший код, так как я успешно использовал очень похожий синтаксис (оба типа) во многих других местах вокруг этого же приложения. И да, я просмотрел десятки подобных вопросов на SO, а также консультировал базовые тексты по объективам C for, но без разрешения.

Как всегда, я открыт для возможности совершить глупую ошибку, но если это так, она ускользает от меня. Код внутри цикла for (я пытаюсь переместить UILabel в ответ на прокрутку связанного UIView), вероятно, не имеет значения, но я включил его на всякий случай.

Вся помощь и наблюдения оценены!

Edit:

Как любезно указал ниже, ответ на этот вопрос в том, что соответствующий dayBarArray пуст. Я просто проверил код, который добавляет объекты, и я недоумеваю. Я, конечно, должен был видеть очевидный ответ в своих NSLogs и не имею никаких оправданий, кроме того, что раньше я проверял код добавления, и бары, похоже, были добавлены. Я отчитаю, когда я выпрямился, что там не так.

Второе редактирование:

ОК, это был тупица ошибкой с моей стороны - я не инициализируется массив. Точно так же, если бы я не опубликовал вопрос, и, поскольку я полагал, что проверил содержимое массива (на самом деле, я проверял, были ли теги применены к UIViews), я не знаю, как долго это будет взяли меня, чтобы понять, что рассказывают мне журналы. Спасибо всем, кто ответил!

+0

Синтаксис - это огонь, коллекция просто пуста. – Douglas

+1

Почему вы ожидаете, что цикл будет выполняться вообще, когда вы четко зарегистрируете, что массив пуст? – rmaddy

+0

Яйцо на лице! смотрите выше. Благодаря! – rattletrap99

ответ

2

dayBarArray.count равно нулю, а условие в цикле i < dayBarArray.count. Перед тем, как войти в тело цикла, он проверяет 0 < 0, что является ложным, поэтому он никогда не входит в тело.

+1

Спасибо, см. Окончательное править выше! – rattletrap99

1

dayBarArray.count должен возвращать число больше 0, чтобы цикл мог выполняться хотя бы один раз. В вас случае, потому что (dayBarArray.count == 0), условие-выражение для цикла:

i < dayBarArray.count 

ложна (потому что я == 0),

и исполнением программа не войдет в цикл.

+0

Спасибо, см. Окончательное править выше! – rattletrap99

1

Ваш цикл будет выполнять только тогда, когда dayBarArray.count больше, чем я, и ваш журнал говорит вам, что dayBarArray.count равен 0, когда я также равен 0.

Ваш код работает правильно. Проверьте, где вы добавляете элементы в dayBarArray.

+0

Спасибо, см. Окончательное править выше! – rattletrap99

Смежные вопросы