我开始学习Web服务,我使用一个url api获取数据并在我的表视图中显示。但我看到了一些教程 - 他们使用 NSURLConnection
或 Rest API 或 AFNetworking 。
我对所有类型都很困惑。我应该在上述类型中使用哪一个。对于我应该使用哪种类型的Web服务。而且我在SO中看到了一些使用同步或异步的疑问。因此,这是从URL获取数据的任何其他类型吗?
实际上对于所有网络服务,我应该使用哪些来获取数据和显示?
答案 0 :(得分:2)
-(void)JsonDataParsing
{
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
[manager POST:url parameters:params
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSDictionary *jsonDict = (NSDictionary *) responseObject;
//!!! here is answer (parsed from mapped JSON: {"result":"STRING"}) ->
NSString *res = [NSString stringWithFormat:@"%@", [jsonDict objectForKey:@"result"]];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
//....
}
];
}
答案 1 :(得分:2)
首先,AFNetworking和NSURLConnection用于Mobile Side。 Rest API不是来自移动端。您在服务器端实现的Rest API,用于处理GUD,POST,PUT和DELETE等CRUD操作。
第三方图书馆可以帮助我们轻松完成工作。 Joda Time是非常受欢迎且值得信赖的图书馆。
AFNetworking发出异步网络请求。要了解有关它的更多信息,请访问AFNetworking。
AFNetworking可以完成NSURLConnection所能做的一切。现在使用它将为您节省大量编写样板代码的时间!
答案 2 :(得分:1)
NSURLConnection
和NSURLSession
用于管理网络操作(如下载和上传),AFNetworking
是使用这些2 API并添加了多线程/错误处理/网络可访问性的框架。 ...为了让您的生活更轻松,RESTful是客户端 - 服务器连接的体系结构,您可以在服务器端实现它,以易于使用的模型(JSON)将内容返回给客户端。
synchronous
意味着你等待它完成其他任何事情,asynchronous
意味着你只是启动它但不需要等待它,就像你对服务器和用户的请求仍然可以同时与您的UI进行交互,因此建议使用asynchronous task
向服务器请求,然后仅更新synchronous
中的用户界面
希望我的解释易于理解和纠正:)
答案 3 :(得分:1)
<强> NSURLConnection的强>
这使您可以通过提供URL
请求对象来加载URL
的内容。使用NSURLConnection
,您可以使用回调块和同步加载异步的网址请求。见这个例子
NSURL *URL = [NSURL URLWithString:@"http://example.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
// ...
}];
如需了解更多信息,请访问apple docs
<强> AFNetworking 强>
这是在基础网址加载之上构建的第三方库。 这很容易通过pod安装并方便使用。请参阅下面的示例,例如我在我的应用中如何使用相同的
-(AFHTTPRequestOperationManager *)manager
{
if (!_manager)
{
_manager = [AFHTTPRequestOperationManager manager];
_manager.requestSerializer = [AFHTTPRequestSerializer serializer];
_manager.responseSerializer = [AFHTTPResponseSerializer serializer];
}
return _manager;
}
上面我们正在初始化AFHTTPRequestOperationManager *manager
[self.manager POST:@"http://example.com" parameters:parameters
success:^(AFHTTPRequestOperation *operation, id responseObject)
{
NSError *error;
NSMutableDictionary *responseDict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:&error];
// return response dictionary in success block
}
failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
// return error in failure block
}]
上面的方法将异步加载数据,剩下的就是自解释。但是如果你想像同步请求那样阻止用户界面而不是使用反模式的[operation waitUntilFinished]
。此处operation
是AFJSONRequestOperation
的实例。