MBRequest 1.3

MBRequest 1.3

测试已测试
语言语言 Obj-CObjective C
许可证 BSD
发布最新发布2014年12月

Sebastian Celis维护。



  • 作者
  • Sebastian Celis

MBRequest是一个简单的iOS和OS X网络库。它基于blocks API,构建在NSURLConnectionNSOperation之上。MBRequest遵循Apple的CLGeocoder类的样式来创建简单、易于使用的类,这些类封装了整个网络请求。MBRequest的目标如下

  • 创建可能最简单的网络请求API。通过仅几行代码,开发者应该能够开始网络请求并传递一个处理该请求结果的块。
  • 为开发者提供一个创建自己类似CLGeocoder类的极简单方式。这些子类只需要设置请求并解析响应。
  • 不要强制实施特定的实现策略,例如单例、"引擎"或"客户端"。相反,简化API,让开发者以任何他们想要的任何方式使用。

要求

MBRequest在iOS 5.0及更高版本和OS X 10.7及更高版本上运行。

用法

要将MBRequest添加到您的应用程序中,克隆MBRequest存储库并将其所有源文件包含在您的项目中。

$ git clone git://github.com/mobiata/MBRequest.git

要引用MBRequest中定义的任何功能,只需在源文件顶部包含#import "MBRequest.h"

基本JSON示例

可以使用MBJSONRequest快速在任意URL获取JSON数据。例如,以下代码将打印出过去一周评分最高的YouTube视频的标题和作者

NSURL *url = [NSURL URLWithString:@"https://gdata.youtube.com/feeds/api/standardfeeds/top_rated?alt=json&time=this_week"];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
MBJSONRequest *jsonRequest = [[MBJSONRequest alloc] init];
[jsonRequest performJSONRequest:urlRequest completionHandler:^(id responseJSON, NSError *error) {
    if (error != nil) {
        NSLog(@"Error requesting top-rated videos: %@", error);
    } else {
        NSArray *videos = [[responseJSON objectForKey:@"feed"] objectForKey:@"entry"];
        for (NSDictionary *videoInfo in videos) {
            NSString *title = [[videoInfo objectForKey:@"title"] objectForKey:@"$t"];
            NSString *author = [[[[videoInfo objectForKey:@"author"] objectAtIndex:0] objectForKey:@"name"] objectForKey:@"$t"];
            NSLog(@"'%@' by %@", title, author);
        }
    }
}];

有趣的类

如果您想合并MBRequest,您可能会发现以下类很有趣

要创建自己的请求,你很可能会想从上面的其中一个类中派生子类。

自定义请求子类

尽管可以使用 MBJSONRequest 直接下载 JSON 数据(如上述示例所示),但我们强烈建议您创建自己的自定义 MBJSONRequest 子类,以处理具体的请求。这将使您的代码更加模块化和易于阅读(并且将使您的类看起来和表现出类似 Apple 的 CLGeocoder 类)。强迫每个人都了解如何设置特定的请求以及从结果 JSON 对象中解析所需数据是愚蠢的。因此,让我们以上一个示例为基础,创建一个 MBRYouTubeRequest

使用此类将简化上述示例,如下所示

MBRYouTubeRequest *request = [[MBRYouTubeRequest alloc] init];
[request requestTopRatedVideosFromIndex:1
                             maxResults:20
                      completionHandler:^(NSArray *videos, NSError *error) {
                          if (error != nil) {
                              NSLog(@"Error: %@", error);
                          } else {
                              for (MBRVideo *video in videos) {
                                  NSLog(@"'%@' by %@", [video title], [video author]);
                              }
                          }
                      }];

ARC 支持

MBRequest 使用 ARC (Automatic Reference Counting)。如果您的项目不使用 ARC,您需要在所有 MBRequest 文件上设置编译器标志 -fobjc-arc。为此

  1. 启动 Xcode 项目。
  2. 导航到您的目标(目标)的 "构建阶段" 选项卡。
  3. 找到所有 MBRequest 源文件,并在 "编译器标志" 列中添加 -f-objc-arc

本地化

MBRequest 定义了一些字符串,理论上可以展示给用户。这些都是通常放在 NSError 对象的 userInfo 字典中的错误消息。MBRequest 使用 MBRequestLocalizedString 宏来尝试获取这些字符串的翻译版本供您的用户使用。如果您决定将对应用程序本地化到除英语以外的语言,此宏给出了一些选择。《code>MBRequestLocalizedString definition is as follows

#ifdef MBRequestLocalizationTable
#define MBRequestLocalizedString(key, default) \
[[NSBundle mainBundle] localizedStringForKey:(key) value:(default) table:MBRequestLocalizationTable]
#else
#define MBRequestLocalizedString(key, default) \
[[NSBundle mainBundle] localizedStringForKey:(key) value:(default) table:nil]
#endif

此宏的第一个参数是字符串键,第二个是默认(英语)翻译。

此宏允许您直接将 MBRequest 字符串添加到您的标准 Localizable.strings 文件中。或者,如果您愿意,可以将所有 MBRequest 字符串放入一个单独的 字符串 文件中。如果您选择后者,您必须定义 MBRequestLocalizationTable 为此文件的名称。例如,如果您想在 MBRequest.strings 文件中,您可以在项目的 Prefix.pch 文件中添加以下内容

#define MBRequestLocalizationTable @"MBRequest"

您可以通过在项目中搜索 MBRequestLocalizedString 的引用来查找 MBRequest 使用的所有字符串。您应该会看到如下类似的多个匹配项

NSString *msg = MBRequestLocalizedString(@"request_unsuccessful_could_not_download_image", @"Request failed. Unable to download image.");