2014-02-16 3 views
0

Эти строки кода проблема:iOS: Почему NSRange всегда выдает ошибку «использование необъявленного идентификатора»?

case CostPeriodMonthly: 
      NSRange days = [gregorian rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:[NSDate date]]; 

      [endDateComponents setDay:days.length]; 
      [endDateComponents setMonth:[todayComponents month]]; 
      [endDateComponents setYear:[todayComponents year]]; 
      break; 

Первая строка с использованием дней подсвечивается поговорку «Использование необъявленных дней идентификатор», но почему? Что мне здесь не хватает?

+0

Там должно быть указание в Xcode, какая часть линии является именно так. – Volker

+0

Да, первая строка использует «дни», поэтому [endDateComponents setDay: days.length]; и «дни» подсвечиваются – MichiZH

+0

Возможный дубликат [Почему мои случаи переключения когда-то нуждаются в фигурных скобках в Objective-C?] (http://stackoverflow.com/questions/17582061/why-do-my-switch-cases-someime -need-braces-in-objective-c) –

ответ

3

Если вы хотите, чтобы объявить новые переменные в case заявлении, вы должны приложить заявления в {} блоке:

case CostPeriodMonthly: { 
      NSRange days = [gregorian rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:[NSDate date]]; 

      [endDateComponents setDay:days.length]; 
      [endDateComponents setMonth:[todayComponents month]]; 
      [endDateComponents setYear:[todayComponents year]]; 
      break; 
} 
+0

На самом деле достаточно добавить точку с запятой после метки корпуса. Представление области с '{...}' может потребоваться, если вы скомпилируете ARC (см. «Возможный дубликат»). –