2014-04-07 4 views
1

이 질문은 Apple Dev 포럼 https://devforums.apple.com/message/956514에 올렸습니다. 여기에 게시하는 것이 좋습니다. Apple 개발자 포럼에는 아직 답변이 없습니다.NSDataDetector와 1900 이전 날짜는 잘못된 날짜를 반환합니다.

1900 년보다 적은 날짜를 입력 할 때마다 NSDataDetector가 잘못된 날짜와 일치합니다. 예를 들어

는 :

년 1 월 1 일이 1900보다 이전의 월 모든 날짜를 보인다 2014

년 1 월 1 일 2015 년 2 월 1-1201 일치 2 월 1-1201 일치, 그와 함께 다시 온다

NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeDate error:&error]; 
NSArray *matches = [detector matchesInString:myDateString options:0 range:NSMakeRange(0, [myDateString length])]; 

for (NSTextCheckingResult *match in matches) { 
    if (match.resultType == NSTextCheckingTypeDate) { 
       determinedDate = match.date; 
    } 
} 
월 날짜 만, 2015 년 그리고 올해 말 여기에 2014

에서 해당 날짜 월 이상하지만 1900 경기 전에 어떤 년, 어떤 날짜는 날짜를 검출 내 코드입니다

myDateString은 구문 분석해야하는 날짜 값이 포함 된 문자열입니다.

뭔가 잘못되었거나 NSDataDetector의 알려진 문제입니까?

답변

0

NSDataDetector은 정규식과 함께 작동합니다. 정규식을 사용하여 날짜를 파싱하는 것은 약간 제한적입니다. NSDataDetector19xx20xx 정규식을 구문 분석 할 수 있다고 생각합니다.

제 조언 - 대신 NSDateFormatter을 사용하십시오.

+0

이 동작을 수정할 수 있으면 좋을 것입니다. –

+0

http://bugreport.apple.com에서 버그를 신고해야합니다. –

+0

NSDateFormatter를 사용하면 "내일 점심 식사"같은 것을 입력 할 수 없으며 특정 날짜 형식을 사용하여 날짜를 입력해야합니다. 사용자에게 친숙하지 않습니다. –

1

Apple은 1700 년 이후의 날짜 동안 작동하도록 NSDataDetectors를 수정했습니다.

내 버그 리포트에 대한 응답

는 다음이었다

우리는 한계를 하향 조정하지만, 우리는 아마 훨씬 더를 내려하지 않습니다.

DataDetectors의 주된 목표는 또는 가까운 미래의 날짜를 처리하거나 실제 사용자 달력 이벤트에 대해 더 많이 사용되는 날짜를 처리하는 것입니다.

몇 년을 추가하면 위양성 (예 : 숫자 형식 숫자가 인 일부 휴대 전화)과 이전 날짜는 마이너 사용 경우가 될 수 있습니다.

이 보고서를 닫았습니다.

합리적인 응답처럼 보입니다. 그래서 나는 지금 당장 그것에 맡길 것입니다. 나는 사용자가 정말로 오래된 날짜를 입력 할 수있는 정규 NSDataPicker 컨트롤을 제공하기 때문에이 기능이 현재 나에게 유용하다고 생각한다.