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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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字符串(NimbleKit)传递给Objective-C函数?_Javascript_Objective C_Ios - Fatal编程技术网

是否将Javascript字符串(NimbleKit)传递给Objective-C函数?

是否将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

我正在编写一个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,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;
 }