gpt4 book ai didi

objective-c - 如何从 NSURLConnection 远程服务器调用返回的对象中获取值?

转载 作者:行者123 更新时间:2023-11-28 20:33:34 25 4
gpt4 key购买 nike

我有一些 Objective-c 代码可以对服务器进行异步调用(我认为是哈哈),但我不太确定,处理从服务器返回的响应的正确方法是什么?

我做这样的事情:

NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];

// ***************
// TODO: ok I dont really understand what this is
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
// **************

[NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{
...

因为我是 Objective-C 的新手,所以我什至不确定去哪里查看如何从对象中获取值,或者如何处理 NSData 或 NSResponse 对象。

我知道我的服务器有时会发回一个 JSON 响应,有时只是一个像“ok”这样的字符串

另外,让我感到困惑的是这个教程:

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html

据此我应该有一些独立的功能,比如

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

所以我的问题是如何从请求的 3 个变量(错误、响应、数据)中获取基本返回数据,我应该什么时候实现我提到的教程建议的方法?教程似乎有一个更优雅的解决方案……但我不确定它是否矫枉过正。

最佳答案

错误

NSError 有一个独特的小特性(尤其是在 block 内),当一个变量和它的地址作为参数传入时(在本例中,一个简单的 NSError*),该方法应该修改对象并返回一个可用的错误情况下的实例。在没有错误发生的正常使用情况下,这应该是 nil,我们可以在 block 的完成处理程序部分中记录它:

[NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{
( iferror)
NSLog(@"Connection Error - %@", [error localizedDescription]);
}];

响应

NSURLResponse 在您的情况下并不重要。正如 Apple 所说:

Note: NSURLResponse objects do not contain the actual bytes representing the content of a URL. See NSURLConnection for more information about receiving the content data for a URL load.

您将使用 NSURLResponse 进行文件下载,仅此而已。 JSON 由 NSURLConnection 返回对象。


数据

可能是整个交易中最重要的部分。您的 JSON 响应将包含在此数据中,这意味着它必须转换为字符串,然后发送给解释器,以便我们可以从 JSON 值中提取实际的 ObjC 对象。为此构建了几个广泛使用的类,包括 JSON Framework , JSONKit , 和 TouchJSON .


一个 NSOperationQueue ,顺便说一句,它很像线程池,但它承担了管理的角色。 NSOperationQueue 对象被发送 NSOperation 对象,然后将其添加到其内部队列并在同样由 NSOperationQueue 对象管理的线程上执行。考虑到 iOS 4.x 中 GCD 的出现,它们现在基本上没有用了,但在遗留软件支持的情况下,它们对于执行异步(或同步,取决于是否在提交的操作上设置了 isConcurrent 属性)很有用后台线程上的任务。

关于objective-c - 如何从 NSURLConnection 远程服务器调用返回的对象中获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11387486/

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