2011-09-26 45 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

相關問題