2011-09-26 44 views
0

我想知道abt "stringByEvaluatingJavaScriptFromString"问题stringByEvaluatingJavaScriptFromString

根据苹果文档。 "The result of running script or nil if it fails."

我有一个方法,在for循环中,我将一个字符串值传递给stringByEvaluatingJavaScriptFromString。它会做什么?这将得到每个字符串的响应或其他事情会发生? 我在做这样的...

- (void)loadWithStartPoint:(NSString *)startPoint endPoint:(NSMutableArray *)endPoints options:(UICGDirectionsOptions *)options { 
    for (int idx = 0; idx < [endPoints count]; idx ++) 
    { 
     NSString *msg = [NSString stringWithFormat:@"loadDirections('%@', '%@', %@)", startPoint, [endPoints objectAtIndex:idx], [options JSONRepresentation]]; 
     [googleMapsAPI stringByEvaluatingJavaScriptFromString:msg]; 
    } 
} 

中序得到响应每个字符串我应该怎么办?我认为它应该对我在这里传递的每一个字符串做出回应。请告诉我做错了什么,以及如何操作我的代码以获取对所有传递的字符串的响应。 任何帮助,将不胜感激.Thnx提前。

回答

2

如果在脚本中发生错误,您应该让JavaScript方法返回默认字符串或其他东西。

function loadDirections() 
{ 

try 
    { 
    //Your code goes here which returns some result 
    } 
catch(err) 
    { 
    var errorFlag = "ERROR"; 
return errorFlag; 
    } 
} 

,然后你应该改变你的目标C代码像下面

NSString *msg = [NSString stringWithFormat:@"loadDirections('%@', '%@', %@)", startPoint, [endPoints objectAtIndex:idx], [options JSONRepresentation]]; 

if([msg isEqualToString:@"ERROR") 
{ 

//Do some error handling 

} 
else 
{ 

//Your actual code goes here 

} 

更新注释:

为了解决您的JavaScript异步的问题:(1)你可以改变你只有在得到第一个调用(2)的响应后才设计和调用javascript方法,否则您可以使用NSTimer,这会给执行带来一点时间。在我看来,根据第一个选项改变你的设计将是完美的。

看一看这些问题 stringByEvaluatingJavaScriptFromString doesn't always seem to work return value javascript UIWebView

+0

我处理这个错误的事情properly.I只是想知道我怎样才能让stringByEvaluatingJavaScriptFromString以响应每个是m传递字符串。它只响应正在传递的最后一个字符串。 – iCoder4777

+0

K现在我得到了你的问题。它的发生是因为javascript是Asynchronous和ur obj c for循环不等待javascript函数完全执行。你可以通过改变你的设计来解决这个问题。更新了我的答案。 – sElanthiraiyan

+0

好的...你可以多描述一下,我怎么能够得到我的soln。我如何改变我想要的soln的代码。 – iCoder4777

相关问题