1. Objective C / Говнокод #12370

    −110

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    - (void) viewDidAppear: (BOOL) animated
    {
        [super viewDidAppear:animated];
        self.tabBarController.tabBar.userInteractionEnabled = YES;
        if (wasAppearFromChild) {
            [super viewWillAppear:animated];
            wasAppearFromChild = NO;
            return;
        }
        goToLastBarNeed = NO;
        if ([delegate isNeedFullUpdate]) //проверяем, нужно ли полное обновление
        {
            if ([delegate isNetworkAvaliable])
            {
                ///тут вызываем полное обновление         
                [delegate showProgressBar];
                [self performSelectorInBackground:@selector(updateLoop) withObject:nil];
                [self performSelector:@selector(progressLoop) withObject:nil];
            }
            else 
            {
                //тут выдаём ошибку про интернет или распаковываем то, что есть
                if (![delegate isTabListExist]) {
                    goToLastBarNeed = YES;
                    [delegate displayAlertOnNetworkError];
                    return;
                }
                else 
                {
                    if ([delegate packTypeCount] == 0) {
                        [delegate showIndicatorView:@"Loading"];           
                        [self performSelectorInBackground:@selector(updateLoop) withObject:nil];
                    }
                }
            }        
        }
        else 
        {   //если попали сюда впервые, то смотрим, не нужно ли обновиться после 24-х часов и либо обновляемся, либо распаковываемся     
            if ([delegate packTypeCount] == 0) 
            {
                if ([delegate isNetworkAvaliable])
                {
                    if ([delegate is24HoursPass]) 
                    {
                        [delegate showIndicatorView:@"Updating"];
                    }
                    else 
                    {
                        [delegate showIndicatorView:@"Loading"];
                    }                
                }
                else 
                {
                    [delegate showIndicatorView:@"Loading"];            
                }            
                [self performSelectorInBackground:@selector(updateLoop) withObject:nil];
            }
        } 
        [super viewWillAppear:animated];
    }
    
    - (void) updateLoop 
    {	
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
        self.view.userInteractionEnabled = NO;		
        [delegate setHasTabPacksResult:NO];    
    	[delegate downloadTabPacks];
    	[self performSelectorOnMainThread:@selector(updateLoop1) withObject:nil waitUntilDone:YES];    
    	[pool release];
    }

    По ходу, опять мой любимый автор.

    Запостил: QuickNick, 27 Декабря 2012

    Комментарии (19) RSS

    • Дальше не менее вкусно

      - (void) updateLoop1
      {
      NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
      myTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(getTimeOut:) userInfo:nil repeats:YES];
      [pool release];
      }

      - (void) getTimeOut: (id) sender
      {
      NSLog(@"timeout");
      if ([delegate getHasTabPacksResult] == YES)
      {
      [myTimer invalidate];
      if (progressTimerIsActive)
      {
      [progressTimer invalidate];
      }
      }
      }
      Ответить
    • Причём performSelectorOnMainThread - это моя правка, там его раньше небыло. И был совершенно эпический race condition.
      Странный код. И проект странный. Целиком слеплен из говна.
      Ответить
      • Я памятник воздвиг себе нерукотворный...
        Ответить
        • Ну а что делать, когда начальство возмущается, тестеры возмущаются, а проект должен был быть сдан 3 дня назад, да и проект-то это - не твой )
          Ответить
          • Огнестрельное оружие, яд, веревка, высокий мост, близлежащая река.
            Ответить
          • У меня на полном серьезе при осмотре этого кода начинаются ассоциации с военачальниками-самоубийцами, которые стрелялись от позора поражения.
            Ответить
            • Ну код-то этот не мой, а при таком подходе должен был стреляться не я, а наш непосредственный начальник. То, который сидит "за стеклом" в центральной комнате :)
              Ответить
    • Кому что, а мне затейливое использование частиц и модальных глаголов тут очень нравится. Это прямо как на товарах для российского рынка произведенных в Китае.
      Ответить
      • Знаете, меня после этой работы ничего не удивляет. Решил тут покопать свой проект со старой работы... Я там, на свой нынешний взгляд, гк не нашёл.
        Ответить
        • Значит уровень твой не изменился ))
          Ответить
          • по-крайней мере не возрос.
            Ответить
            • Не исключаю, что даже упал. Потому как я точно помню, говнокод там был. Например - ручкая сборка SQL запроса. Но, блин, она занимает 200 строк всего, а я почти каждый день последние 2 года наблюдал методы длинной 500+ строк. А сам факт сборки строки запроса... Ну так блин, он хотя бы параметризованный. :)
              Ответить

    Добавить комментарий