来自NSObject的WebScriptObject

时间:2015-01-12 19:06:45

标签: javascript objective-c macos webkit web-scripting

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

我也可以在JS对象上调用方法。这非常有效。任何返回的对象都将转换为ObjC类型,如NSArrayNSDictionary

现在我想发送一个对象。在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;

这根本没有用。 arguments是一个"参数数组,用于传递给脚本环境"。 文档表示"要传递给方法的值"。

WHAT ?!苹果?香蕉? NSObject或者是什么样的?

当我传递字典(例如我使用WebScripting协议收到的字典)时,我得到一个类型为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;
}

但我无法设置WebScriptObject的对象值,我总是EXC_BAD_ACCESS

编辑我

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

0 个答案:

没有答案