gpt4 book ai didi

iphone - 使用阻塞或类似方法从 NSURLConnection 获取数据

转载 作者:行者123 更新时间:2023-11-28 20:38:29 31 4
gpt4 key购买 nike

大家好,这将是我的第一篇文章,我对 Objective-C 还很陌生,但对编码来说并不是全新的。我一直在做大量的阅读和大量的谷歌搜索,我的很多答案都来自这个网站。所以现在我真的被困住了,我想是时候问问专家了。

我基本上是在尝试从给定的 URL 获取原始 HTML 数据,以便我可以解析它以获取信息。我已经对所有解析进行了排序,并且可以检索原始 HTML,但是我正在努力了解如何在数据从 NSURLConnection 到达时停止程序,以便我可以使用它。目前我的程序呼啸而过连接并且持有的字符串被保留为空,直到不久之后它被请求填充。我相信我需要使用“同步”连接,但这是不受欢迎的,因为它在处理请求时卡住了 UI。我试着这样调用它....

urlData = [getURLClass getURL: @"http://www.google.co.uk"];

希望将原始 HTML 放入字符串 urlData 中,以便我可以解析它。我类(class)的当前代码如下....

//Create the request
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:urlString]];

//Open NSURLConnection with 'request'
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
//If we receive something
if (data) {
//Pass and decode to string
receivedData = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"Received HTML: %@", receivedData);
}

//Something went wrong
else {
// ToDO: Sort out any errors

}
}];

return receivedData;

当它运行时,日志显示“Received HTML: nil”并且返回值也是空白,但如果我稍等片刻,然后再次调用该类,它已填充上一个请求的数据。我确实尝试了另一种方法,将数据检索到

-(void) connectionDidFinishLoading

但这给我留下了一个问题,即我无法从被调用的方法中“返回”数据。正如我所说,我是 Objective-C 的新手。我知道有像 ASIHTTPRequest 这样的已停产的包装器,但我确信对此有一个比使用其他人的类更简单的答案。如果我能找到答案,它也将帮助我学习,我只需要让程序等待接收数据,然后再返回类。在我可以使用 Obj-C 行走之前,我可能会尝试运行,但除非我可以与网络交互,否则我的程序毫无用处。

提前致谢。血浆

最佳答案

你应该能够用 NSString 函数 initWithContentsOfURL 做你想做的事:

NSError* error;
NSString* htmlData = [[NSString alloc] initWithContentsOfURL:myURL encoding:NSUTF8StringEncoding error:&error];

它也可能是 NSASCIIStringEncoding 用于编码......但无论如何它都会同步为您提供字符串。

编辑:

更正了拼写 initWithContent*s*OfURL,添加了 alloc

关于iphone - 使用阻塞或类似方法从 NSURLConnection 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9574248/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com