ReactiveCocoa应用---NSURLSession封装
2016-07-15 10:22
337 查看
ReactiveCocoa应用1—-NSURLSession封装
+ (RACSignal *)fetchJSONFromSession:(NSURLSession *)session withRequest:(NSURLRequest *)request { return [[[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) { NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { if (! error) { NSError *jsonError = nil; NSString* newStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; id json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&jsonError]; if (! jsonError) { NSDictionary *dataOfDictionary = (NSDictionary *)json; if (dataOfDictionary[@"stat"] && [dataOfDictionary[@"stat"] integerValue] == 0) { [subscriber sendNext: json[@"data"]]; [subscriber sendCompleted]; }else{ NSString *errmsg = dataOfDictionary[@"msg"]; if (![errmsg isKindOfClass:[NSString class]]) { errmsg = @"服务器未知错误"; } [subscriber sendError:[NSError errorWithDomain:[AppConstants httpHost] code:[dataOfDictionary[@"stat"] integerValue] userInfo:@{NSLocalizedDescriptionKey:errmsg}]]; } } else { DDLogError(@"function: json 组装错误:%@", [jsonError localizedDescription]); if (jsonError != nil) { [subscriber sendError:jsonError]; } } } else { DDLogError(@"function: dataTask error: %@", [error localizedDescription]); [subscriber sendError:error]; } }]; [dataTask resume]; return [RACDisposable disposableWithBlock:^{ [dataTask cancel]; }]; }] logError] replayLazily]; }
相关文章推荐
- React-native ListView不滚动
- react-native-Alert
- react学习资料整理
- ReactJS笔记03--状态
- x.net混淆器(dotNET Reactor) V4.2.8.4 绿色汉化版
- React Native 开发之 (05) flexbox布局
- React Native 开发之 (06) JSX
- ReactNative 搭建开发环境
- [iOS]解决React Native升级到 0.29 之后, iPhone 真机调试经常断线的问题
- Windows环境下搭建React Native
- Windows环境下搭建React Native
- Windows环境下搭建React Native
- react-native缓存数据
- react-native 环境搭建遇到问题
- react native 视图
- Android开发技术周报特刊之React Native
- React Native专题
- React-Native之Android:原生界面与React界面的相互调用
- ReactNative学习中遇到的坑
- IOS Dev Intro - ReactiveCocoa Tutorial 02