- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在更新另一位开发者创建的 iOS 应用程序。他使用 ASIHTTPRequest 来处理 http 请求。但是,我必须使用的应用程序版本崩溃了。由于 ASIHTTPRequest 不再更新,我当时想我应该改用 AFNetworking,但它太复杂了我无法弄清楚。
所以最后我想我可以单独使用 NSURLConnection。
这是我要替换的原始代码:
-(NSArray*)readUTF16LEFeed:(NSURL*) urlToRead{
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:urlToRead];
[request startSynchronous];
NSError *error = [request error];
if (!error) {
lastModified = [NSDate date];
NSData *response = [request responseData];//UTF-16LE
NSString* responseString = [[NSString alloc] initWithData:response encoding:NSUTF16LittleEndianStringEncoding];
DLog(@"string is: %@",responseString);
responseString = [responseString stringByReplacingOccurrencesOfString:@"ISO-8859-1" withString:@"UTF16-LE"];
NSData* data = [responseString dataUsingEncoding:NSUTF16LittleEndianStringEncoding];
return [self parseNamesFromXML:data];
}
return nil;
}
下面是我尝试使用的:
-(NSArray*)readUTF16LEFeed:(NSURL*) urlToRead{
NSURLRequest *request = [NSURLRequest requestWithURL:urlToRead];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error ) {
if ([data length] >0 && error == nil)
{
// DO YOUR WORK HERE
lastModified = [NSDate date];
// NSData *response = [request responseData];//UTF-16LE
NSString* responseString = [[NSString alloc] initWithData:data encoding: NSUTF16LittleEndianStringEncoding];
DLog(@"string is: %@",responseString);
responseString = [responseString stringByReplacingOccurrencesOfString:@"ISO-8859-1" withString:@"UTF16-LE"];
NSData* data = [responseString dataUsingEncoding:NSUTF16LittleEndianStringEncoding];
return [self parseNamesFromXML:data];
}
else if ([data length] == 0 && error == nil)
{
NSLog(@"Nothing was downloaded.");
}
else if (error != nil){
NSLog(@"Error = %@", error);
}
}];
return nil;
}
但是,我收到错误消息“不兼容的 block 指针类型将 NSArray 发送到类型为 void 的参数。而且“控件可能到达非 void block 的末尾。”
我怎样才能让它工作?
最佳答案
将您的方法的返回类型设置为 void。不要退回任何东西。只需调用 [self parseNamesFromXML:data];方法。
-(void)readUTF16LEFeed:(NSURL*) urlToRead{
NSURLRequest *request = [NSURLRequest requestWithURL:urlToRead];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error ) {
if ([data length] >0 && error == nil)
{
// DO YOUR WORK HERE
lastModified = [NSDate date];
// NSData *response = [request responseData];//UTF-16LE
NSString* responseString = [[NSString alloc] initWithData:data encoding: NSUTF16LittleEndianStringEncoding];
DLog(@"string is: %@",responseString);
responseString = [responseString stringByReplacingOccurrencesOfString:@"ISO-8859-1" withString:@"UTF16-LE"];
NSData* data = [responseString dataUsingEncoding:NSUTF16LittleEndianStringEncoding];
[self parseNamesFromXML:data];
}
else if ([data length] == 0 && error == nil)
{
NSLog(@"Nothing was downloaded.");
}
else if (error != nil){
NSLog(@"Error = %@", error);
}
}];
}
在 parseNamesFromXML
方法中,处理您的结果并将结果数组分配给一个属性。您可以随时随地访问它。
-(void) parseNamesFromXML:(NSData *)xmlData
{
NSError *error;
//DLog(@"data is %@", [[NSString alloc] initWithData:xmlData encoding:NSUTF8StringEncoding ]);
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:xmlData options:0 error:&error];
if (doc)
{
self.dataArray = [self parseXmlDoc:doc];
}
}
关于ios - 使用sendAsynchronousRequest :queue:completionHandler: for URL request,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25422301/
我的主 UI 线程调用 sendAsynchronousRequest NSURLConnection的方法获取数据。 [NSURLConnection sendAsynchronousRequest
在下面的方法中,如果我在completionHandler中进行数据处理,是否会阻塞主线程?换句话说,completionHandler 中执行的任何操作是在主线程上完成还是在后台线程上完成? + (
我打电话 [NSURLConnection sendAsynchronousRequest:request queue:queue
我正在尝试使用 POST 从 PHP 页面获取简单的文本响应。我有以下代码: func post(url: String, info: String) -> String { var URL:
我不想做的事情的示例: var b = 0 let URL: NSURL = NSURL(string: "[URL to php file]")! let request:NSMutableURL
我正在使用以下代码进行网络调用。我知道响应将在 mainQueue 中运行,因为我已将队列参数指定为 [NSOperationQueue mainQueue] 但我想知道实际的 sendAsynchr
我正在开发一个 iOS 应用程序,它可以将大量任务分派(dispatch)到我的串行队列。任务是从我的网络服务器下载图像,将其保存到磁盘,然后显示在 UIImageView 上。但是,[NSURLCo
我有一个创建 NSURLRequest 的方法,并使用 NSURLConnection 方法 sendAsynchronousRequest:queue:compltionHandler: 发送该请求
我正在编写一些执行 http 请求的 API 代码,并且我一直在使用 [NSUrlConnection:sendAsynchronousRequest:queue:completionHandler]
这是我的代码崩溃的部分: let bodyData = "username=" + username + "&password=" + password let URL: NSURL = NSURL(
我正在尝试使用 POST 从 PHP 页面获取简单的文本响应。我有以下代码: func post(url: String, info: String) -> String { var URL:
我正在使用 sendAsynchronousRequest:queue:completionHandler: 上传文件(我已经删除了一些旧的第三方库,以支持使用此 native 方法直接调用。我保留了
当我执行NSURLConnection.sendAsynchronousRequest时,它总是显示相同的错误: Invalid conversion from throwing function o
我的应用程序允许用户拍照并将其上传到 PHP 服务器。我使用 sendAsynchronousRequest 调用将数据(带有照片文件的表单)发送到服务器。调试时,所有这些调用在我的 iPad 2 上
每次用户打开应用程序时,我都必须加载 API 的刷新 token 。 在我的 appDelegate.m 中,每次应用程序打开时我都会调用此代码: if(success){ //if the url
对不起,我不知道这一点,但我想知道为什么我尝试建立与数据库的连接时会出现延迟。 我基本上是从数据库中提取数据以将信息显示回 UITableView,但连接建立似乎有延迟。 - (void)viewDi
如果互联网连接出现问题,我会尝试取消异步请求。 var connection: NSURLConnection! self.connection = NSURLConnection.sendAsync
我的应用程序中有几个内存泄漏(不!请参阅更新 1),它们都归结为异步 URLRequest。下面的代码给了我一个内存泄漏,似乎“数据”从未被释放(下面的代码在逻辑上没有在我的应用程序中使用,因为它是一
我用这段代码发出请求: - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{ //
.h @property (strong) NSString *reply; 我有以下方法: .m @synthesize reply; - (void)send { [NSURLConnecti
我是一名优秀的程序员,十分优秀!