Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
ASIHTTPRequest在emulator上工作,但在iphone上不工作_Iphone_Ios_Protocols_Asihttprequest - Fatal编程技术网

ASIHTTPRequest在emulator上工作,但在iphone上不工作

ASIHTTPRequest在emulator上工作,但在iphone上不工作,iphone,ios,protocols,asihttprequest,Iphone,Ios,Protocols,Asihttprequest,嘿,伙计们,到目前为止,我已经在ASIHTTPRequest上做了很多工作,并且在我的ios应用程序中使用了好几次,但是在我的应用程序的一个区域,我添加了另一个ASIHTTPRequest方法,它不能正常工作 首先必须指出的是,我试图分散下载和解析数据的负担的原因。。如果在子视图上执行此操作,则需要2-3秒的时间来浏览第二个xml工作表并获取所有相关值。。如果我在这个主视图上这样做,人们看不到加载的任何内容,那么当返回到子视图时,它应该看起来几乎是即时的。我不知道这有多正确,但我认为这是一件可以

嘿,伙计们,到目前为止,我已经在ASIHTTPRequest上做了很多工作,并且在我的ios应用程序中使用了好几次,但是在我的应用程序的一个区域,我添加了另一个ASIHTTPRequest方法,它不能正常工作

首先必须指出的是,我试图分散下载和解析数据的负担的原因。。如果在子视图上执行此操作,则需要2-3秒的时间来浏览第二个xml工作表并获取所有相关值。。如果我在这个主视图上这样做,人们看不到加载的任何内容,那么当返回到子视图时,它应该看起来几乎是即时的。我不知道这有多正确,但我认为这是一件可以让应用程序感觉有点快的事情

因此,我将其设置为asihttprequest方法,与其他不使用缓存的方法相同

我从主视图中选择一个表单元格,加载第二个视图并将一组信息解析到表视图中。然后,用户选择一个值,该值将传回主视图并显示

然后,我解析另一批xml数据,对照第二个xml表中的所有内容检查所选的valueID。因此,当用户选择第二个单元格时,我会将刚刚解析的所有数据传递到第二个视图,使其看起来好像加载的速度快了很多

这是一个流程图,可以解释我想做得更好

这就是解析器代码在主视图中的样子,主视图在模拟器中工作,但在iphone上不工作

这是我的协议,我从子视图调用它,并将所有需要的值传递给mainviews-ASIHTTPRequest,然后将请求发送给mainviews-ASIHTTPRequest

    - (void) setManufactureSearchFields:(NSArray *)arrayValues withIndexPath:(NSIndexPath *)myIndexPath
    {
        manufactureSearchObjectString = [[arrayValues valueForKey:@"MANUFACTURER"] objectAtIndex:0];
        manufactureIdString = [[arrayValues valueForKey:@"MANUID"] objectAtIndex:0]; //Restricts Models dataset
        manufactureResultIndexPath = myIndexPath;
        [self.tableView reloadData]; //reloads the tabels so you can see the value in the tableViewCell.
        //need some sort of if statment here so that if the back button is pressed modelSearchObjectString is not changed..

        if (oldManufactureSearchObjectString != manufactureSearchObjectString) {
            modelResultIndexPath = NULL;
            modelSearchObjectString = @"empty";
            oldManufactureSearchObjectString = [[NSString alloc] initWithFormat:manufactureSearchObjectString];
        }
//These two lines below are what execute ASIHTTPRequest and set up my parser etc
        dataSetToParse = @"ICMod"; // This sets the if statment inside parserDidEndDocument
        [self setRequestString:@"ICMod.xml"]; //Sets the urlstring for XML inside setRequestString

    }
然后激发ASIHTTPRequest委托方法

- (IBAction)setRequestString:(NSString *)string
{
    //Set database address
    //NSMutableString *databaseURL = [[NSMutableString alloc] initWithString:@"http://127.0.0.1:8888/codeData/"]; // imac development
    NSMutableString *databaseURL = [[NSMutableString alloc] initWithString:@"http://127.0.0.1:8888/codeData/"]; // iphone development

    //PHP file name is being set from the parent view
    [databaseURL appendString:string];

    NSLog(@"%@", databaseURL);

    //call ASIHTTP delegates (Used to connect to database)
    NSURL *url = [NSURL URLWithString:databaseURL];

    //This sets up all other request
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];

    [request setDelegate:self];
    [request startAsynchronous];

}
当我在iphone上进行测试时,通过断点进行调试,这就是应用程序失败的地方。。但是在模拟器上它没有问题

下一个方法在iphone上进行测试时不会被调用,但在模拟器上运行良好

- (void)requestFinished:(ASIHTTPRequest *)request
{   
        responseString = [request responseString]; //Pass requested text from server over to NSString 
        capturedResponseData = [responseString dataUsingEncoding:NSUTF8StringEncoding]; 

        [self startTheParsingProcess:capturedResponseData];
}
这是在iphone上测试时唯一被激发的另一个代理,它向我发送了一个alret,告诉我连接超时

- (void)requestFailed:(ASIHTTPRequest *)request
{
    NSError *error = [request error];
    NSLog(@"%@", error);
    UIAlertView *errorAlert = [[UIAlertView alloc] initWithTitle:@"Error!" message:@"A connection failure occurred." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [errorAlert show];
}
我不认为你需要看到所有的解析器委托,因为我不认为它们是问题所在,因为这是应用程序失败的地方

下面是打印到日志中的内容

2011-11-29 14:38:08.348 code[1641:707] http://000.000.000.000:0000/codeData/second.xml
2011-11-29 14:38:18.470 code[1641:707] Error Domain=ASIHTTPRequestErrorDomain Code=2 "The request timed out" UserInfo=0x1e83a0 {NSLocalizedDescription=The request timed out}

如果您需要更多我的代码,请告诉我。。但是我在这里有点不知所措,就像我说的那样,除了我从第二个视图设置的协议中初始化它之外,我如何对其他视图执行ASIHTTPRequest没有区别。。也许我应该在重新加载表或其他东西之前设置这些值。。。我不确定,希望有人能帮我解决这个问题,并找出我看不到的问题。

你确定URL上的大小写正确吗?模拟器在区分大小写方面比实际设备宽容得多。

你能查看吗http://127.0.0.1:8888/codeData/在iPhone上安装Safari?无论iPhone连接到什么网络,服务器都可能无法使用


如果您的iMac使用的是DCHP,则地址可能在您最初设置该值后发生了更改。

不要盲目使用,而是使用HTTP代理(如),以确保您的请求实际被触发,并产生预期的结果

是的。是正确的,只是仔细检查一下。。。我真的希望这是错的。。该死。好吧,只是检查一下你发给我的链接,知道吗,谢谢你的建议。好吧,当我意识到这一点时,我已经打了一半的回复给你了。。我以为我很聪明,今天早上打开了防火墙。。。我第一次在我的mac上做这个。。我一点也不知道这会弄乱我的共享IP的这台电脑。。啊,啊,真烦人。。模拟器工作了,因为它是计算机。。iphone无法工作,因为它试图通过wifi访问这台计算机上的共享文件,但由于我的防火墙,这一切都没有发生!该死!哈哈,但非常感谢您提出的通过safari进行测试的想法。。这就是我点击防火墙的原因。我建议做两个改变,让你的开发生活更轻松。第一,让你连接到的地址可以从iPhone应用程序中编辑(即使只是在调试版本中),第二,如果可以的话,使用一个Bonjour(即本地)地址。我使用的IP地址是你可以在系统首选项>共享>网络共享中找到的地址。。具有可通过无线网络用于测试的ip地址。。感谢您的建议,尽管现在可以查看它。请查看“计算机名”设置中同一共享面板的顶部,其中显示:“本地网络上的计算机可以访问您的计算机:foo.local”完美。。谢谢你P对这些东西仍然很陌生,但是每天都在学习,特别是在这个很棒的社区的帮助下!您是否在iPhone上运行web服务器?之前你有一个不同的地址,但你把它改成了。