다음 IOS 코드는 iOS의 경우 키 코드 된 배열을 다른 개체의 JavaScriptCore에 할당 한 다음 복사 후 대상 개체의 배열 연산자를 사용하는 예를 보여줍니다. I는 이산 자바 스크립트는 자바 스크립트 함수의 매개 변수로 오브젝트를 전달뿐만 아니라 목표-C에서 개체를 설정 IOS 모두 같은 목적-C 사이 및 JavaScriptCore는 이러한 객체를 전달 도시했다. 이 코드를 복사하려는 경우
JSContext *javascriptContext = [[JSContext alloc] init];
javascriptContext[@"consoleLog"] = ^(NSString *message) {
NSLog(@"Javascript log: %@",message);
};
NSDictionary *myArray = [NSDictionary dictionaryWithObjectsAndKeys:@0, @"item0", @1, @"item1", @2, @"item2", nil];
NSLog(@"myArray = %@", myArray);
javascriptContext[@"obj1"] = myArray;
[javascriptContext evaluateScript:@"var myFunction = function(arrayArg) {
consoleLog(\"obj1['item2'] = \" + obj1['item2']);
consoleLog(\"arrayArg['item0'] = \" + arrayArg['item0']);
var obj2 = obj1;
consoleLog(\"obj2['item1'] = \" + obj2['item1']);
obj1 = { 'key0': 0, 'key1': 1, 'key2': 2 };
obj2 = obj1;
consoleLog(\"obj2['key0'] = \" + obj2['key0']);
return obj2;
};"];
JSValue *function = javascriptContext[@"myFunction"];
NSArray *argList = [NSArray arrayWithObjects:myArray, nil];
JSValue *result = [function callWithArguments:argList];
NSDictionary *javascriptArray = [result toObject];
NSLog(@"javascriptArray returned = %@", javascriptArray);
는 자바 스크립트 함수 (나는 명확하게 이러한 추가)가 포함 된 문자열에 포함 된 개행 문자를 제거하십시오.
이 코드는 다음과 같은 콘솔 로그를 생성합니다 샘플 코드에서 볼 수 있듯이, IOS JavaScriptCore는 프레임 워크가 제공
2014-02-07 16:49:55.901 TestHarness[4674:70b] myArray = {
item0 = 0;
item1 = 1;
item2 = 2;
}
2014-02-07 16:49:55.903 TestHarness[4674:70b] Javascript log: obj1['item2'] = 2
2014-02-07 16:49:55.904 TestHarness[4674:70b] Javascript log: arrayArg['item0'] = 0
2014-02-07 16:49:55.904 TestHarness[4674:70b] Javascript log: obj2['item1'] = 1
2014-02-07 16:49:55.904 TestHarness[4674:70b] Javascript log: obj2['key0'] = 0
2014-02-07 16:49:55.905 TestHarness[4674:70b] javascriptArray returned = {
key0 = 0;
key1 = 1;
key2 = 2;
}
내장있는 NSDictionary 객체와 자바 스크립트 배열 사이의 전환을 가능하게한다. 는 NSDictionary는 자바 스크립트 "개체"로 변환했지만 배열 연산자 오브젝티브 C로부터 분사 값에 잘 작동하고, 객체가 새로운 자바 키홈 배열 리턴 유효 :로 JSValue.h 찾고 그것을이 내장 변환을 설명 Objective-C의 NSDictionary 객체
이 질문이 해결되었거나 오해가 있습니까?
배열을 JavaScript 객체에 할당 한 후 Objective-C 외부 배열의 한 요소를 변경하는 추가 실험은 JavaScriptCore가 외부 배열의 점이 아닌 배열 내용의 복사본을 사용한다는 것을 보여줍니다 (변경 사항은 표시되지 않음) . 내 대답이 당신의 문제를 해결할 것이라고 생각하지 않습니다. – Mike
그래, 도움에 감사하지만, 불행히도이 문제는 해결되지 않습니다. 당신은 JavaScriptCore에 관한 한, 객관적인 -c에서 배열을 복사하고, 하나의 javascript 객체의 배열 포인트를 다른 배열로 만들려고하는 것이 불가능한 것처럼 보입니다. 나는 아직도이 일을하는 방법을 찾아 내려고 노력하고 있지만, 지금까지 행운이 없었다. – iNightfaller
나는 색인화 된 배열에 대해서만이 작업을하려고한다는 것을 지적하고자한다. "함수"와 다른 데이터가 필요로하는 객체와 같은 다른 객체를 포함하는 몇 가지 자바 스크립트 클래스가 있으므로 인덱스 된 부분 만 다른 배열을 가리 키도록하려는 것은 힘들 것 같습니다. – iNightfaller