Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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
以JSON格式向JavaScript环境公开Objective-c对象_Javascript_Objective C - Fatal编程技术网

以JSON格式向JavaScript环境公开Objective-c对象

以JSON格式向JavaScript环境公开Objective-c对象,javascript,objective-c,Javascript,Objective C,我希望在运行时以JSON格式表示任何objective-c对象,以便javascript脚本可以使用它通过“点”符号访问任何字段/变量/属性 比如说, 对象的Objective-c类可以是: @interface myNativeObject PrimtivieType *pVar; CustomClassType *cVar; @end @interface CustomDataType PrimitiveType *myVar; @end var nativeO

我希望在运行时以JSON格式表示任何objective-c对象,以便javascript脚本可以使用它通过“点”符号访问任何字段/变量/属性

比如说,

对象的Objective-c类可以是:

@interface myNativeObject 
   PrimtivieType *pVar;
   CustomClassType *cVar;
@end
@interface CustomDataType
  PrimitiveType *myVar;
@end
    var nativeObjInJavaScript = {
                                  pVar:pval,
                                  cVar:{
                                         myVar:myVarValue
                                  }
                                }
var LValue = nativeObjInJavaScript.cVar.myVar;
其中CustomClassType可能包含另一个对象,如下所示:

@interface myNativeObject 
   PrimtivieType *pVar;
   CustomClassType *cVar;
@end
@interface CustomDataType
  PrimitiveType *myVar;
@end
    var nativeObjInJavaScript = {
                                  pVar:pval,
                                  cVar:{
                                         myVar:myVarValue
                                  }
                                }
var LValue = nativeObjInJavaScript.cVar.myVar;
我想以JSON格式向JavaScript公开myNativeObject,如下所示:

@interface myNativeObject 
   PrimtivieType *pVar;
   CustomClassType *cVar;
@end
@interface CustomDataType
  PrimitiveType *myVar;
@end
    var nativeObjInJavaScript = {
                                  pVar:pval,
                                  cVar:{
                                         myVar:myVarValue
                                  }
                                }
var LValue = nativeObjInJavaScript.cVar.myVar;
因此,下面的JavaScript表达式应该可以正常工作:

@interface myNativeObject 
   PrimtivieType *pVar;
   CustomClassType *cVar;
@end
@interface CustomDataType
  PrimitiveType *myVar;
@end
    var nativeObjInJavaScript = {
                                  pVar:pval,
                                  cVar:{
                                         myVar:myVarValue
                                  }
                                }
var LValue = nativeObjInJavaScript.cVar.myVar;
我在想

1.)编写一个递归函数,该函数将使用Objective-C运行时库获取有关对象的信息并生成JSON等价物。我走对了吗

2.)在这种情况下,Objective-c的键值编码功能是否有帮助


关于,在OSX上,WebKit已经有了这种机制,请阅读。您只需获取窗口脚本对象并在其中设置Obj-C对象:

 WebScriptObject* wso=[webView windowScriptObject];
 [wso setValue:objCobj forKey:@"javascriptName"];
您需要在中指定可从javascript端访问的方法名称和属性

 + (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector;
 + (BOOL)isKeyExcludedFromWebScript:(const char *)name;
您公开的类的

在iPhone上,可以在
UIWebView
上使用的方法是构造javascript对象,委托方法用于接收返回的信息。如果您想公开泛型对象,您需要使用方法1),但我认为这通常不好
NSObject
可以有许多私有IVAR,这些IVAR由运行时拾取,您可能不想公开。我想最好给出你想要公开的属性列表


该项目大量使用这种技术,因此阅读其源代码可能会对您有所帮助。

在OS X上,WebKit已经有了这种机制,read。您只需获取窗口脚本对象并在其中设置Obj-C对象:

 WebScriptObject* wso=[webView windowScriptObject];
 [wso setValue:objCobj forKey:@"javascriptName"];
您需要在中指定可从javascript端访问的方法名称和属性

 + (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector;
 + (BOOL)isKeyExcludedFromWebScript:(const char *)name;
您公开的类的

在iPhone上,可以在
UIWebView
上使用的方法是构造javascript对象,委托方法用于接收返回的信息。如果您想公开泛型对象,您需要使用方法1),但我认为这通常不好
NSObject
可以有许多私有IVAR,这些IVAR由运行时拾取,您可能不想公开。我想最好给出你想要公开的属性列表


该项目大量使用这种技术,因此阅读其源代码可能会对您有所帮助。

Yuji-我想在iPhone上实现这一点,因此“WebScriptObject”肯定不会有用。无论如何,谢谢你的回复。我将研究PhoneGap源代码,并尝试编写递归函数,该函数可以选择性地公开所需的属性/变量。谢谢。当您使用
WebScriptObject
时,您不应该使用webView委托接收返回的信息。相反,您应该在自定义对象中实现
WebScripting
,并使用它使JS能够调用ObjC程序中的方法。Yuji-我想在iPhone上实现这一点,因此“WebScriptObject”肯定不会有用。无论如何,谢谢你的回复。我将研究PhoneGap源代码,并尝试编写递归函数,该函数可以选择性地公开所需的属性/变量。谢谢。当您使用
WebScriptObject
时,您不应该使用webView委托接收返回的信息。相反,您应该在自定义对象中实现
WebScripting
,并使用它使JS能够调用ObjC程序中的方法。