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

    −416

    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
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    	if (self.mode == EventsMode)
    	{
    		SWEvent *event = [self.eventsController.dataModel itemAtIndexPath:indexPath];
    
    		static NSString *CellIdentifier = @"actionCell";
    		SWActionCell    *cell           = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    
    		[cell formatForEvent:event];
    
    		@weakify(self);
    		@weakify(cell);
    
    		if (![cell.actionButton_1 bk_hasEventHandlersForControlEvents:UIControlEventTouchUpInside])
    		{
    			[cell.actionButton_1 bk_addEventHandler:^(id sender) {
    				@strongify(cell);
    
    				SWEvent *cellEvent = cell.event;
    
    				if (cellEvent.isLikedValue)
    				{
    					[[SWCore instance] unlikeEvent:cellEvent];
    				}
    				else
    				{
    					[[SWCore instance] likeEvent:cellEvent];
    				}
    
    			}                      forControlEvents:UIControlEventTouchUpInside];
    		}
    
    		if (![cell.actionButton_2 bk_hasEventHandlersForControlEvents:UIControlEventTouchUpInside])
    		{
    			[cell.actionButton_2 bk_addEventHandler:^(id sender) {
    				@strongify(self);
    				@strongify(cell);
    
    				SWEvent *cellEvent = cell.event;
    
    				self.presentController = [SWMediaController controllerWithEvent:cellEvent];
    				[self.presentController addPhotoInController:self];
    			}                      forControlEvents:UIControlEventTouchUpInside];
    		}
    
    		if (![cell.actionButton_3 bk_hasEventHandlersForControlEvents:UIControlEventTouchUpInside])
    		{
    			[cell.actionButton_3 bk_addEventHandler:^(id sender) {
    				@strongify(self);
    				@strongify(cell);
    
    				SWEvent *cellEvent = cell.event;
    
    				[self performSegueWithIdentifier:@"commentsSegue" sender:cellEvent];
    			}                      forControlEvents:UIControlEventTouchUpInside];
    		}
    
    
    		if (![cell.actionButton_4 bk_hasEventHandlersForControlEvents:UIControlEventTouchUpInside])
    		{
    			[cell.actionButton_4 bk_addEventHandler:^(id sender) {
    				@strongify(self);
    				@strongify(cell);
    
    				SWEvent *cellEvent = cell.event;
    				self.presentController = [SWMediaController controllerWithEvent:cellEvent];
    				[self.presentController openPhotoBrowserInNavigationController:self.navigationController];
    			}                      forControlEvents:UIControlEventTouchUpInside];
    		}
    
    
    		if (![cell.nextButton bk_hasEventHandlersForControlEvents:UIControlEventTouchUpInside])
    		{
    			[cell.nextButton bk_addEventHandler:^(id sender) {
    				@strongify(self);
    				@strongify(cell);
    
    				SWEvent *cellEvent = cell.event;
    
    				[self performSegueWithIdentifier:@"eventControllerSegue" sender:cellEvent];
    
    			}                  forControlEvents:UIControlEventTouchUpInside];
    		}
    
    
    		return cell;
    	}

    Найдено в одном чужих из проектов. Призываем экспертов по говнокоду чтобы прокомментировать неочевидные решения автора и пролить свет на тайну этого метода

    Запостил: shadeapps, 06 Апреля 2015

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

    • weaky-strongify первый раз вижу, поэтому не скажу как по работе, но один раз @strongify(self); пропущено.
      В целом бредово выглядит пихать в cellForRowAtIndexPath: установку обработчиков кнопок. Я бы по нажатию на кнопку выцеплял информацию о cell и производил бы действия в зависимости от его типа/индекса. Обработчик нажатия на кнопку видимо лучше оставить внутри view controller
      Ответить
    • И чо?
      Ответить

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