ASIHTTPRequest在emulator上工作,但在iphone上不工作
嘿,伙计们,到目前为止,我已经在ASIHTTPRequest上做了很多工作,并且在我的ios应用程序中使用了好几次,但是在我的应用程序的一个区域,我添加了另一个ASIHTTPRequest方法,它不能正常工作 首先必须指出的是,我试图分散下载和解析数据的负担的原因。。如果在子视图上执行此操作,则需要2-3秒的时间来浏览第二个xml工作表并获取所有相关值。。如果我在这个主视图上这样做,人们看不到加载的任何内容,那么当返回到子视图时,它应该看起来几乎是即时的。我不知道这有多正确,但我认为这是一件可以让应用程序感觉有点快的事情 因此,我将其设置为asihttprequest方法,与其他不使用缓存的方法相同 我从主视图中选择一个表单元格,加载第二个视图并将一组信息解析到表视图中。然后,用户选择一个值,该值将传回主视图并显示 然后,我解析另一批xml数据,对照第二个xml表中的所有内容检查所选的valueID。因此,当用户选择第二个单元格时,我会将刚刚解析的所有数据传递到第二个视图,使其看起来好像加载的速度快了很多 这是一个流程图,可以解释我想做得更好 这就是解析器代码在主视图中的样子,主视图在模拟器中工作,但在iphone上不工作 这是我的协议,我从子视图调用它,并将所有需要的值传递给mainviews-ASIHTTPRequest,然后将请求发送给mainviews-ASIHTTPRequestASIHTTPRequest在emulator上工作,但在iphone上不工作,iphone,ios,protocols,asihttprequest,Iphone,Ios,Protocols,Asihttprequest,嘿,伙计们,到目前为止,我已经在ASIHTTPRequest上做了很多工作,并且在我的ios应用程序中使用了好几次,但是在我的应用程序的一个区域,我添加了另一个ASIHTTPRequest方法,它不能正常工作 首先必须指出的是,我试图分散下载和解析数据的负担的原因。。如果在子视图上执行此操作,则需要2-3秒的时间来浏览第二个xml工作表并获取所有相关值。。如果我在这个主视图上这样做,人们看不到加载的任何内容,那么当返回到子视图时,它应该看起来几乎是即时的。我不知道这有多正确,但我认为这是一件可以
- (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服务器?之前你有一个不同的地址,但你把它改成了。