是否将Javascript字符串(NimbleKit)传递给Objective-C函数?
我正在编写一个Javascript类,它将带有一个参数的函数传递给Objective-C类(使用NimbleKit框架)。它是这样做的:是否将Javascript字符串(NimbleKit)传递给Objective-C函数?,javascript,objective-c,ios,Javascript,Objective C,Ios,我正在编写一个Javascript类,它将带有一个参数的函数传递给Objective-C类(使用NimbleKit框架)。它是这样做的: NKRegisterClass("SKGetEvents"); // TEMP Test date sent to the NKitAction, won't be hardcoded var testDate = "2011-10-14"; var goButton = new NKButton(); goButton.init(100,20,10
NKRegisterClass("SKGetEvents");
// TEMP Test date sent to the NKitAction, won't be hardcoded
var testDate = "2011-10-14";
var goButton = new NKButton();
goButton.init(100,20,100,50,"callGetEvents(testDate)"); /*Button to launch function */
goButton.setTitle("Get Events");
goButton.show();
function callGetEvents(testDate) {
CallNKitAction("GetEventsFunction?className=SKGetEvents&dateStringInput="+testDate);
}
因此,它将使用CallNKitAction调用已注册的Objective-C类函数,并传递
javascript字符串(在本例中为var testDate=“2011-10-14”)作为参数。Objective-C类中的响应函数根本不会被调用。看起来是这样的:
-(NSString *) GetEventsFunction:(const char *)dateStringInput {
// Do stuff with date passed }
如果我将函数更改为不带参数,只在其中硬编码一个日期,则该函数将被调用并正常工作。这告诉我问题是试图将JS变量作为(const char*)传递。是问题所在。我不知道如何将其调用到函数中,然后将其转换为NSString以供使用,到目前为止,我只尝试将字符串作为NSString、const char传递,并使用StringWithUTF8String将其转换为NSString,但都没有用。很抱歉这么长时间的解释,但是有人对如何实现这一点有什么想法吗?(也曾在论坛上提问,但不是一个很大的社区,所以也在这里发帖。)非常感谢您的帮助。如果其他人需要知道,我将补充我是如何解决这个非常古老的问题的: NimbleKit确实允许通过存储在NSDictionary中的一些内置参数方法,根据需要将尽可能多的参数从Javascript传递到Objective-C。它甚至允许一个简单的单行程序将结果返回给调用的Javascript函数 Javascript方面是可以接受的(除非您想要得到一个结果,下面将对此进行详细介绍),但是对于目标Objective-C类,在标题中添加以下内容:
@property (nonatomic, retain) NSDictionary *_parameters;
@property (nonatomic, retain) NSString *_lastReturnResult;
并将以下方法添加到类实现的底部:
//Used by NK to receive parameters from JS to a method
- (void)setNKParameters:(NSDictionary *)parameters {
self._parameters = parameters;
}
//Used by NK to return result back to JS without a return call
- (NSString*)methodResult {
return self._lastReturnResult;
}
现在要使用这些函数,下面是一个示例,它可以从iOS类接收结果NSString!首先是Javascript:
// Note the &sync=yes, this makes the call synchronous which ensures it will return a result before moving on
var eventArrayString = CallNKitAction("GetEventsFunction?className=FNGetEvents&fromDate="+fromDate+"&toDate="+toDate+"&sync=yes");
NKLog("eventString:"+eventArrayString);
现在是Objective-C类(注意返回类型是void,它不接受典型意义上的参数,这是因为它们的传入/返回方式不同):
现在,您不仅可以使用NimbleKit将对象从Javascript传递到Objective-C,还可以返回结果供Javascript使用!关于这些方面的更多资源,NimbleKit论坛上涌现了一个伟大的项目,它涵盖了许多混合JS/iOS功能
- (void) GetEventsFunction {
// Get the passed parameters from Javascript
NSString *fromDate = [self._parameters objectForKey:@"fromDate"];
NSString *toDate = [self._parameters objectForKey:@"toDate"];
NSString *resultString;
/* Do stuff with the passed parameter(s) here... */
// Now return the result back to the Javascript side
self._lastReturnResult = resultString;
}