Latest | 0.0.3 |
---|---|
Homepage | https://github.com/gonefish/GQModelController |
License | MIT |
Platforms | ios 7.0 |
Dependencies | AFNetworking, Mantle |
Authors |
GQDataController
GQDataController是一款符合MVVM模式的网络框架,通过混合AFNetworking和Mantle让你更方便的处理网络交互。
基本使用
GQDataController是一个抽象类,使用前需要先创建新的子类。每个子类表示一种接口交互。
首先,子类必须实现这个接口,并返回请求的接口字符串。
- (NSArray *)requestURLStrings;
通过初始化方法创建实例。
- (instancetype)initWithDelegate:(id <GQDataControllerDelegate>)aDelegate;
GQDataControllerDelegate委托方法
GQDataControllerDelegate定义了3个方法用于回调,当然你也可以选择Block风格的回调。
- (void)dataControllerWillStartLoading:(GQDataController *)controller;
- (void)dataControllerDidFinishLoading:(GQDataController *)controller;
- (void)dataController:(GQDataController *)controller didFailWithError:(NSError *)error;
接口请求
创建完实例后,你可以发起请求接口
不带参数的接口请求。
- (void)request;
带参数的接口请求
- (void)requestWithParams:(NSDictionary *)params;
Block风格
- (void)requestWithParams:(nullable NSDictionary *)params
success:(nullable GQRequestSuccessBlock)success
failure:(nullable GQRequestFailureBlock)failure;
其它配置
- (NSString *)requestMethod;
结果处理
检测返回的结果是否有效
- (BOOL)isValidWithObject:(id)object;
手动处理返回结果,object是由AFNetworking返回的JSON对象。
- (void)handleWithObject:(id)object;
Mantle
GQDataController可以自动的将AFNetworking返回的结果转换成Mantle对象。在GQDataController中定义了mantleObject和mantleObjectList 2个实例属性。如果转换的JSON是字典,会将结果赋值到mantleObject;如果转换的JSON是数组,则会将结果赋值到mantleObjectList。
启用Mantle转换
mantleObject和mantleObjectList都有相对应的配置方法,你需要手动指定转换用的Class和JSON路径(可选)。
默认实现中mantleObjectListKeyPath和mantleListModelClass会返回mantleObjectKeyPath和mantleModelClass的值。
- (Class)mantleModelClass;
- (NSString *)mantleObjectKeyPath;
- (Class)mantleListModelClass;
- (NSString *)mantleObjectListKeyPath;
内置DataSource
GQDataController声现UITableViewDataSource和UICollectionViewDataSource,你可以快速的创建DataSource。
@property (nonatomic, copy) NSString *cellIdentifier;
@property (nonatomic, copy) GQTableViewCellConfigureBlock tableViewCellConfigureBlock;
@property (nonatomic, copy) GQCollectionViewCellConfigureBlock collectionViewCellConfigureBlock;
分页
GQPagination对象描述分页时的常用信息。
@property (nonatomic, strong, nullable) GQPagination *pagination;
以分页的方式请求
- (void)requestMore;
其它
接口重试
可以设置多个请求地址,方便在接口请求失败时,使用另外的地址继续请求。
- (NSArray *)requestURLStrings;
接口Stub
GQDataController也集成了OHHTTPStubs,允许你使用本地JSON文件来做为接口返回,该功能只在定义过DEBUG宏的条件下开启。
复制
GQDataController也实现NSCopying协议,你可以快速的复制当前的实例。
单例
+ (instancetype)sharedDataController;
这个子类都可以类方法来获取自己的单例。
系统要求
支持iOS 7以上
第三库依赖:
- AFNetworking 2.6.3
- Mantle 1.5.6
- OHHTTPStubs 4.6.0
安装
CocoaPods
pod 'GQDataController', '~> 0.2'
例子
请参考Demo工程中的例子:
- 基本使用
- 使用Block风格的回调
- 使用Mantle处理返回结果
- DataSource
- 分页
- 接口的Stub
FAQ
是否支持XML的返回格式?
当前只支持JSON格式。
如何为接口添加公共参数?
自定义AFHTTPRequestSerializer,然后在初始化方法中设置
self.requestOperationManager.requestSerializer
如何自定义接口的响应
自定义AFJSONResponseSerializer,然后在初始化方法中设置
self.requestOperationManager.responseSerializer
你甚至可以自定义子类,用于将任意格式的结果转换成JSON。
是否需要创建自己的基类?
总是继承自己的基类是最好的实践。你可以在基类里配置AFNetworking及其它自定义属性。
LICENSE
See LICENSE
Latest podspec
{ "name": "GQModelController", "version": "0.0.3", "summary": "A Model Controller like UIViewController", "description": "u5c01u88c5AFNetworkingu548cMantleu7684MVVMu5b9enu901au8fc7GQDataControlleru8fdbu884cu89c6u56feu7684u5c5eu6027u7ed1u5b9a", "homepage": "https://github.com/gonefish/GQModelController", "platforms": { "ios": "7.0" }, "license": "MIT", "authors": { "Qian GuoQiang": "[email protected]" }, "source": { "git": "https://github.com/gonefish/GQModelController.git", "tag": "0.0.3" }, "source_files": "GQModelController*.{h,m}", "dependencies": { "AFNetworking": [ "~> 2.5.4" ], "Mantle": [ "~>1.5.4" ] } }
Mon, 29 Feb 2016 06:58:03 +0000