2014-01-24 3 views
5

IOS 7에서 도입 된 새로운 JavaScriptCore.framework Objective-C API를 통해 Java 7을 내 IOS 7 응용 프로그램에 임베드합니다.JavaScriptCore.framework IOS 7과 함께 소개 된 Objective-C API는 나쁜 NSDate 변환을 제공합니다. (버그 :

Objective-C와 Javascript 사이의 잘 통합 된 브리지에 대한 소개를 보려면 Apple 개발자 네트워크의 WWDC 소개 "JavaScript를 기본 응용 프로그램에 통합"세션을 확인하십시오. https://developer.apple.com/wwdc/videos/?id=615.

편집 : WWDC 2013의 비디오 컬렉션이 지금 여기에 이동 : https://developer.apple.com/videos/wwdc/2013/?id=615

내가 가진 문제는 내있는 NSDate 객체 (모두 인수를 전달하고 직접 자바 스크립트 변수를 설정)입니다 심하게 자바 스크립트 날짜로 변환 할 것으로 보인다. 날짜는 자바 스크립트 내부 다른입니다

2014-01-24 14:42:08.019 yhere[70180:70b] myDate = Fri Jan 24 2014 14:42:08 GMT+1100 
2014-01-24 14:42:08.019 yhere[70180:70b] Javascript log: date1 = Sat Jan 17 1970 13:15:34 GMT+1100 (EST) 
2014-01-24 14:42:08.020 yhere[70180:70b] Javascript log: dateArg = Sat Jan 17 1970 13:15:34 GMT+1100 (EST) 
2014-01-24 14:42:08.020 yhere[70180:70b] javascriptDate = Fri Jan 24 2014 14:42:08 GMT+1100 

참고 : 다음과 같은 로그를 생성

self.javascriptContext[@"consoleLog"] = ^(NSString *message) { 
    NSLog(@"Javascript log: %@",message); 
}; 
NSDate *myDate = [NSDate date]; 
NSDateFormatter *dateFormatter = [NSDateFormatter new]; 
[dateFormatter setDateFormat:@"EEE MMM dd yyyy HH:mm:ss 'GMT'ZZZ"]; // Show in same format as javascript 
NSLog(@"myDate = %@", [dateFormatter stringFromDate:myDate]); 
self.javascriptContext[@"date1"] = myDate; 
[self.javascriptContext evaluateScript:@"var myDateFn = function(dateArg) { consoleLog(\"date1 = \" + date1); consoleLog(\"dateArg = \" + dateArg); return dateArg };"]; 
JSValue *function = self.javascriptContext[@"myDateFn"]; 
NSArray *argList = [NSArray arrayWithObjects:myDate, nil]; 
JSValue *result = [function callWithArguments:argList]; 
NSDate *javascriptDate = [result toDate]; 
NSLog(@"javascriptDate = %@", [dateFormatter stringFromDate:javascriptDate]); 

: 여기에 내 코드입니다. 나는 체크했다. 예외 나 자바 스크립트 코드 내에서 발생하는 다른 에러가 없다. (명확성을 위해 여기에 예외 처리를 포함하지 않았다.)

내가 바보 같은 짓을 한 경우, 그렇지 않으면 프레임 워크가 사실 수 있도록 잊어 버린 경우 그것은 거의 자바 스크립트 날짜를 측정하는 것과 JavaScriptCore.framework

에 버그가 있다는 사실을 나에게 보인다 확인하시기 바랍니다 밀리 초 1970 년 이후보다는 초에서 사용하는 1970 가입일 : 다음 모든 내가 출구에서 1000 자바 스크립트 및 분할에 전달하기 전에 1000 배 더 큰 날짜를 강제하는 경우

(아래 코드를 참조)있는 NSDate dateWithTimeIntervalSince1970] 날짜가 정확합니다 (즉, 같은 날짜).

NSDate *myDate = [NSDate date]; 
NSDateFormatter *dateFormatter = [NSDateFormatter new]; 
[dateFormatter setDateFormat:@"EEE MMM dd yyyy HH:mm:ss 'GMT'ZZZ"]; // Show in same format as javascript 
NSLog(@"myDate = %@", [dateFormatter stringFromDate:myDate]); 
myDate = [NSDate dateWithTimeIntervalSince1970:[myDate timeIntervalSince1970]*1000]; // Workaround BUG 
self.javascriptContext[@"date1"] = myDate; 
[self.javascriptContext evaluateScript:@"var myDateFn = function(dateArg) { consoleLog(\"date1 = \" + date1); consoleLog(\"dateArg = \" + dateArg); return dateArg };"]; 
JSValue *function = self.javascriptContext[@"myDateFn"]; 
NSArray *argList = [NSArray arrayWithObjects:myDate, nil]; 
JSValue *result = [function callWithArguments:argList]; 
NSDate *javascriptDate = [result toDate]; 
javascriptDate = [NSDate dateWithTimeIntervalSince1970:[javascriptDate timeIntervalSince1970]/1000]; // Workaround BUG 
NSLog(@"javascriptDate = %@", [dateFormatter stringFromDate:javascriptDate]); 

업데이트 로그 :이 (15920754)에 대한 버그 리포트를 제기

2014-01-24 14:43:44.156 yhere[70180:70b] myDate = Fri Jan 24 2014 14:43:44 GMT+1100 
2014-01-24 14:43:44.157 yhere[70180:70b] Javascript log: date1 = Fri Jan 24 2014 14:43:44 GMT+1100 (EST) 
2014-01-24 14:43:44.157 yhere[70180:70b] Javascript log: dateArg = Fri Jan 24 2014 14:43:44 GMT+1100 (EST) 
2014-01-24 14:43:44.158 yhere[70180:70b] javascriptDate = Fri Jan 24 2014 14:43:44 GMT+1100 

. 아무도 이것이 버그가 아니며 내가 잘못한 것을했다고 생각합니까?

답변

6

나는이 문제 (15920754)에 대한 버그 보고서를 제출 한 이래로이 질문에 플래그를 지정하려고합니다. (자바 스크립트 변환 이전의 1000 배의 곱셈과 자바에서 변환 후 1000 배의 곱하기 올바른 값은 애플이 여기에 버그가 있음을 분명히합니다.

나는 애플이 다르게 말하면 다시 게시하겠다.

는 UPDATE

:

애플이 아이폰 OS 8

+0

에서이 문제를 해결 한 나는 그것이 버그 생각하지 않습니다. Apple의 두 번째 기준 시간 표준은 다른 모든 사람의 밀리 초 기준 시간 표준과 다소 차이가 있습니다. 컨텍스트 사이를 지날 때 자동으로 변환해야한다는 점은 개선 요청이므로 제출해야합니다. –

+0

@jshier - JSValue.h 살펴보기 Apple은 자동 변환 (자바 스크립트 날짜 포함)을 위해 지원되는 내장 테이블 유형을 제공하지만 변환이 잘못되었습니다. – Mike