MBRequest是一个简单的iOS和OS X网络库。它基于blocks API,构建在NSURLConnection和NSOperation之上。MBRequest遵循Apple的CLGeocoder类的样式来创建简单、易于使用的类,这些类封装了整个网络请求。MBRequest的目标如下
MBRequest在iOS 5.0及更高版本和OS X 10.7及更高版本上运行。
要将MBRequest添加到您的应用程序中,克隆MBRequest存储库并将其所有源文件包含在您的项目中。
$ git clone git://github.com/mobiata/MBRequest.git
要引用MBRequest中定义的任何功能,只需在源文件顶部包含#import "MBRequest.h"
。
可以使用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,您可能会发现以下类很有趣
MBBaseRequest
—— 基础请求对象。MBHTTPRequest
—— 处理HTTP请求的MBBaseRequest
子类。MBJSONRequest
—— 直接处理JSON数据的MBHTTPRequest
子类。MBImageRequest
)——MBHTTPRequest
的子类,用于处理远程图片的下载。MBXMLRequest
)——MBHTTPRequest
的子类,用于处理 XML 数据的下载和解析。MBMultipartFormData
)——一个辅助类,帮助创建 多部分表单数据。要创建自己的请求,你很可能会想从上面的其中一个类中派生子类。
尽管可以使用 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]);
}
}
}];
MBRequest 使用 ARC (Automatic Reference Counting)。如果您的项目不使用 ARC,您需要在所有 MBRequest 文件上设置编译器标志 -fobjc-arc
。为此
-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.");