Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.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
Objective-c[For loop]在UIWebview中加载HTML并从JavaScript函数中检索数据_Javascript_Objective C_Json_Uiwebview - Fatal编程技术网

Objective-c[For loop]在UIWebview中加载HTML并从JavaScript函数中检索数据

Objective-c[For loop]在UIWebview中加载HTML并从JavaScript函数中检索数据,javascript,objective-c,json,uiwebview,Javascript,Objective C,Json,Uiwebview,我正在用Objective-c为IOS制作一个应用程序,我需要能够循环浏览一堆网页,并使用嵌入式javascript函数返回一些JSON值 我在应用程序的其他地方使用页面,javascript可以根据需要工作。在这一点上,我确实存储了JSON响应,但由于用户可能不会查看每个页面,应用程序不一定要检查所有JSON值 下面的代码部分是我用来循环所有页面、加载HTML字符串和运行javascript函数的部分。问题是这些值总是返回为空 -(void)webViewDidFinishLoad:(UIWe

我正在用Objective-c为IOS制作一个应用程序,我需要能够循环浏览一堆网页,并使用嵌入式javascript函数返回一些JSON值

我在应用程序的其他地方使用页面,javascript可以根据需要工作。在这一点上,我确实存储了JSON响应,但由于用户可能不会查看每个页面,应用程序不一定要检查所有JSON值

下面的代码部分是我用来循环所有页面、加载HTML字符串和运行javascript函数的部分。问题是这些值总是返回为空

-(void)webViewDidFinishLoad:(UIWebView *)webView {
    NSLog(@"finished loading");
    NSString *jsonValues = [webView stringByEvaluatingJavaScriptFromString:@"getFields()"];
}

for (int i = 1; i <= shifts; i++)
    {
        ontracMultipleWevViewController *RT9909 = [viewControllerDictionary objectForKey:[NSString stringWithFormat:@"Shift %d RT9909", i]];
        if (RT9909 && [RT9909.viewControllers count] > 0) {
            for (ontracRTViewController *r9909 in RT9909.viewControllers) {

                 UIWebView *webView = [[UIWebView alloc] init];
                 [webView setDelegate: self];
                 [webView loadHTMLString:r9909.htmlString baseURL:[NSURL URLWithString:r9909.urlToLoad]];
                [self webViewDidFinishLoad:webView];
                [self.view addSubview:webView];

                if([self webViewDidFinishLoad:webView]){
                    r9909.jsonValues = [webView stringByEvaluatingJavaScriptFromString:@"getFields()"];

                   if(r9909.jsonValues != nil && ![r9909.jsonValues isEqualToString:@""] && rt9909ShiftCount == 0){

                   ........rest of code
-(void)webViewDidFinishLoad:(UIWebView*)webView{
NSLog(“已完成装载”);
NSString*jsonValues=[webView stringByEvaluatingJavaScriptFromString:@“getFields()”];
}
对于(int i=1;i 0){
用于(RT9909.ViewController中的OnTractViewController*r9909){
UIWebView*webView=[[UIWebView alloc]init];
[webView setDelegate:self];
[webView加载htmlString:r9909.htmlString基URL:[NSURL URLWithString:r9909.urlToLoad]];
[自webViewDidFinishLoad:webView];
[self.view addSubview:webView];
如果([self-webViewDidFinishLoad:webView]){
r9909.jsonValues=[webView stringByEvaluatingJavaScriptFromString:@“getFields()”];
如果(r9909.jsonValues!=nil&&![r9909.jsonValues isEqualToString:@”“]&&rt9909ShiftCount==0){
……代码的其余部分

注意:我没有收到任何错误或NSLogs来建议任何问题

您需要隔离

if([self webViewDidFinishLoad:webView]){
    r9909.jsonValues = [webView stringByEvaluatingJavaScriptFromString:@"getFields()"];
阻止
for循环
&将
标记
添加到您的网络视图中


实施

- (void)webViewDidFinishLoad:(UIWebView *)webView;
UIWebView
的可选委托功能放入


if(...) {
      r9909.jsonValues = [webView stringByEvaluatingJavaScriptFromString:@"getFields()"];
 }


这里的逻辑。
如果检查
现在将基于您将分配的
webview.tag
,它将在
for循环中创建webview
,您需要隔离

if([self webViewDidFinishLoad:webView]){
    r9909.jsonValues = [webView stringByEvaluatingJavaScriptFromString:@"getFields()"];
阻止
for循环
&将
标记
添加到您的网络视图中


实施

- (void)webViewDidFinishLoad:(UIWebView *)webView;
UIWebView
的可选委托功能放入


if(...) {
      r9909.jsonValues = [webView stringByEvaluatingJavaScriptFromString:@"getFields()"];
 }



这里的逻辑。
如果检查
则现在将基于您将分配的
webview.tag
,它将在
for循环中创建webview

您正在调用您的self
webviewdiffinishload:
?当webview完成加载时调用它的不是代理吗?@Larme感谢您的回复事实上,我忘了添加那个方法。@Larme也忘了所有关于委托的事情,现在我们来研究一下。Thanks@Larme我已经用代码更新了我的问题,以包含该委托(还将UIWebviewDelegate添加到.h文件中)。尽管您不了解委托模式,但仍然存在相同的问题,并且此调用应该是异步的。不要称自己为
webViewDidFinishLoad:
。我的猜测是,您没有通过
if([self webViewDidFinishLoad:webView])
。您正在调用自己的
webViewDidFinishLoad:
?当webView完成加载时,调用它的不应该是代理吗?@Larme谢谢您的回复,我实际上忘记添加该方法了。@Larme也忘了所有关于代理的事情,现在我们来研究一下。Thanks@Larme我已经用代码更新了我的问题,以包括委托(还将UIWebviewDelegate添加到.h文件中)。尽管您不了解委托模式,但仍然存在相同的问题,并且此调用应该是异步的。不要称自己为
webViewDidFinishLoad:
。我猜,您没有通过
if([self-webViewDidFinishLoad:webView])
。请确保将代码块4个空格作为选项卡,而不是使用“``”,为您编辑了格式:)谢谢您的回复@yStack我不确定我是否可以不使用
for循环
,因为我需要迭代
x
的数量shifts@jampez77循环的
for
仍然存在,只是您(以编程方式)不要调用
webViewDidFinishLoad:
函数。当webview实际加载完其内容时,操作系统将调用
webViewDidFinishLoad:
&您将从此处继续执行您的操作。@yStack啊,好的,我现在同意您的意见。问题是操作系统没有调用
webViewDidFinishLoad
。请确保您的选项卡代码块4个空格,而不是使用“`”,为您编辑了格式:)谢谢您的回复@yStack我不确定我是否可以不使用
for循环
,因为我需要迭代
x
的数量shifts@jampez77循环的
for
仍然存在,只是您(以编程方式)不要调用
webViewDidFinishLoad:
函数。当webview实际完成加载其内容时,操作系统将调用
webViewDidFinishLoad:
&您将从此处继续执行操作。@yStack啊,好的,我现在同意了。问题是操作系统没有调用
webViewDidFinishLoad