Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 来自NSObject的WebScript对象_Javascript_Objective C_Macos_Webkit_Web Scripting - Fatal编程技术网

Javascript 来自NSObject的WebScript对象

Javascript 来自NSObject的WebScript对象,javascript,objective-c,macos,webkit,web-scripting,Javascript,Objective C,Macos,Webkit,Web Scripting,我正在使用WebScriptingrespWebScriptObject使我的WebApp与ObjC接口通信,反之亦然 我还可以调用JS对象上的方法。这很有效。任何返回的对象都将转换为ObjC类型,如NSArray或NSDictionary 现在我想发送一个对象。在JavaScript中,我会这样做: external.processDict({a: 1, b: 2, c: 3}); 但我如何使用ObjC实现这一点呢?文件说: /*! @method callWebScriptMeth

我正在使用
WebScripting
resp
WebScriptObject
使我的WebApp与ObjC接口通信,反之亦然

我还可以调用JS对象上的方法。这很有效。任何返回的对象都将转换为ObjC类型,如
NSArray
NSDictionary

现在我想发送一个对象。在JavaScript中,我会这样做:

external.processDict({a: 1, b: 2, c: 3});
但我如何使用ObjC实现这一点呢?文件说:

/*!
    @method callWebScriptMethod:withArguments:
    @param name The name of the method to call in the script environment.
    @param arguments The arguments to pass to the script environment.
    @discussion Calls the specified method in the script environment using the specified arguments.
    @result Returns the result of calling the script method.
    Returns WebUndefined when an exception is thrown in the script environment.
*/
- (id)callWebScriptMethod:(NSString *)name withArguments:(NSArray *)arguments;
这毫无帮助。
参数
是一个“传递到脚本环境的参数”数组。文档中说“要传递给方法的值”

作为什么?!苹果?香蕉<代码>NSObject或什么类型的

当我传递一个字典(例如我使用WebScript协议收到的字典)时,我得到一个类型为
ObjCRuntimeObject
的空对象,没有值也没有键

那么,如何向环境发送数组和/或字典呢

到目前为止,我尝试的是:

+ (id)_parseObject:(id)object {
    if ([object isKindOfClass:[NSArray class]]) {
        return [self webScriptObjectForArray:object];
    }
    else if ([object isKindOfClass:[NSDictionary class]]) {
        return [self webScriptObjectForDctionary:object];
    }
    else if ([object respondsToSelector:@selector(stringValue)]) {
        return [object stringValue];
    }

    return [NSString stringWithFormat:@"%@", object];
}

+ (WebScriptObject *)webScriptObjectForDctionary:(NSDictionary *)dictionary {
    dictionary = [dictionary copy];
    WebScriptObject *object = [[WebScriptObject alloc] init];

    for (NSString *key in [dictionary allKeys]) {
        [object setValue:[self _parseObject:[dictionary objectForKey:key]] forKey:key];
    }

    return object;
}

+ (WebScriptObject *)webScriptObjectForArray:(NSArray *)array {
    array = [array copy];
    WebScriptObject *object = [[WebScriptObject alloc] init];

    for (int i = 0; i < [array count]; i++) {
        [object setValue:[self _parseObject:[array objectAtIndex:i]] forKey:[NSString stringWithFormat:@"%@", @(i)]];
    }

    return object;
}
+(id)\u解析对象:(id)对象{
if([object iskindof类:[NSArray类]]){
返回[self-webScriptObjectForArray:object];
}
else if([object iskindof类:[NSDictionary类]]){
返回[self-WebScriptObjectForDictionary:object];
}
else if([对象响应选择器:@selector(stringValue)]){
返回[对象字符串值];
}
返回[NSString stringWithFormat:@“%@”,对象];
}
+(WebScriptObject*)WebScriptObjectForDictionary:(NSDictionary*)字典{
字典=[字典副本];
WebScriptObject*object=[[WebScriptObject alloc]init];
for(NSString*输入[字典中的所有键]){
[object setValue:[self\u parseObject:[dictionary objectForKey:key]]forKey:key];
}
返回对象;
}
+(WebScriptObject*)webScriptObjectForArray:(NSArray*)数组{
数组=[array copy];
WebScriptObject*object=[[WebScriptObject alloc]init];
对于(int i=0;i<[数组计数];i++){
[object setValue:[self_parseObject:[array objectAtIndex:i]]forKey:[NSString stringWithFormat:@“%@”,@(i)];
}
返回对象;
}
但是我不能设置那个
WebScriptObject
的对象值,我总是得到
EXC\u BAD\u访问权

编辑I

我发现使用
NSArray
我得到了一个数组。那么如何使用字典呢