我想在RUNTIME中以JSON格式表示任何objective-c对象,以便javascript脚本可以使用它通过'dot'表示法访问任何字段/变量/属性。
例如,
该对象的Objective-c类可以是:
@interface myNativeObject
PrimtivieType *pVar;
CustomClassType *cVar;
@end
其中CustomClassType可能包含另一个对象,如下所示:
@interface CustomDataType
PrimitiveType *myVar;
@end
我想以JSON格式将myNativeObject公开给JavaScript,如下所示:
var nativeObjInJavaScript = {
pVar:pval,
cVar:{
myVar:myVarValue
}
}
因此,现在跟随JavaScript表达式shoule正常工作:
var LValue = nativeObjInJavaScript.cVar.myVar;
我在考虑
1。)编写递归函数,该函数将使用Objective-C运行时库来获取有关对象的信息并生成JSON等效项。我是在正确的轨道上吗?
2。)在这种情况下,Objective-c的键值编码功能可能有任何帮助吗?
此致
答案 0 :(得分:1)
在OS X上,WebKit已经有了这个机制,请阅读this document。您只需要获取窗口脚本对象并在那里设置Obj-C对象:
WebScriptObject* wso=[webView windowScriptObject];
[wso setValue:objCobj forKey:@"javascriptName"];
您需要在
中指定可从javascript端访问的方法名称和属性 + (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector;
+ (BOOL)isKeyExcludedFromWebScript:(const char *)name;
你公开的课程的。
在iPhone上,您可以在UIWebView
上使用的方法stringByEvaluatingJavascriptFromString:构建javascript对象,使用委托方法webView:shouldStartLoadWithRequest:navigationType:
来接收信息。如果你想暴露通用对象,你需要使用方法1),但我不认为这通常是好的; NSObject
可以拥有许多由运行时选取的私有ivars,您可能不想公开它们。我想最好给出你想要公开的属性列表。
项目PhoneGap大量使用这种技术,因此阅读其源代码可能会对您有所帮助。