2017-01-19 7 views
1

일/월 UIPickerView를 만들려고합니다. 목표는 하루/한 달을 선택하여 그 날/달에 일어난 역사적인 사건을 나열하는 것입니다.NSCalendar를 사용한 한 달의 최대 일수

[NSCalendar currentCalendar]maximumRangeOfUnit:NSCalendarUnitDay] 

은 그레고리력에서 최대 일 수, 즉 31 일입니다. 실제로 원하는 것은 그레고리력으로 2 월 29 일을 반환하는

[calendar maximumRangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarMonth unit:2] 

의 라인에있는 것입니다.

내가 볼 수있는 것에서는 가까운 유일한 것이 forDate : 이는 도움이되지 않습니다. 빠른 해킹은 8 년 범위의 날짜 (비 윤년 연도를 처리하기 위해)를 사용하는 것이지만 윤년 규칙을 다양하게하는 다른 캘린더 유형에서는 작동하지 않습니다.

어떻게해야합니까?

+0

피커에 표시되는 내용과 사용 방법을 조금 확장 할 수 있습니까? 피커는 1 년뿐만 아니라 1 년을 표시합니까? –

+0

명시된 바와 같이, 일/월, 전혀 표시되지 않음, 연도가 포함 된 경우 기존 UIDatePicker를 사용할 수 있거나 forDate : 메시지가 문제를 해결할 수 있으므로 문제가 존재하지 않습니다. –

+0

@DavidKnight - 그의 문제는 그가 28 일 밖에 걸리지 않는 2017 년 2 월 1 일에 이런 일이 생기더라도 2 월 29 일을 원한다는 것이다. (따라서 8 년 동안 이것을 반복하는 것에 대한 그의 의견은 걱정이된다. 이것은 그레고리력이 아닌 달력에는 충분하지 않을 수 있습니다.) – Rob

답변

1

NSCalendar은 사용자가 요청한 기능을 직접 제공하지 않습니다. 다른 캘린더를 지원하고 싶으므로 -[NSCalendar rangeOfUnit:inUnit:forDate:]으로 전화를 걸어 많은 연/년/월 조합을 반복하는 것이 가장 좋습니다. (예를 들어) 히브리 달력에 19 년주기가 있다고 믿기 때문에 8 년은 충분하지 않습니다.

Also note that other calendars (e.g. the Chinese calendar) have more than just the two eras (BCE/CE) of the Gregorian calendar이므로 연도와 월을 변경해야합니다.

값이 비싼 경우이를 수행하는 명령 줄 프로그램을 작성하고 앱에 포함 된 테이블의 소스 코드를 내보낼 수 있습니다. 그런 다음 사전 컴파일 빌드 단계로 프로그램을 실행할 수 있습니다.

기록 이벤트의 데이터베이스에 대한 적절한 액세스 권한이있는 경우 데이터베이스에서 실제로 사용 된 모든 날짜를 찾아서 범위가 해당 날짜를 포함하는지 확인해야합니다.

+0

가능하다면 그레고리력이 아닌 것을 지원하고 싶습니다. 그러므로 질문입니다. –

+0

답변을 업데이트했습니다. –

+0

그래, 8은 그레고리오의 예에 불과했습니다. 사전 편집 제안은 앞으로 나아갈 방향과 같습니다. –