casatwy / rtnetworking Goto Github PK
View Code? Open in Web Editor NEWThe networking layer for iOS App.
License: Other
The networking layer for iOS App.
License: Other
CTRequestGenerator 第 84 行
NSMutableURLRequest *request = [self.httpRequestSerializer requestWithMethod:@"PUT" URLString:urlString parameters:requestParams error:NULL]; request.HTTPBody = [NSJSONSerialization dataWithJSONObject:requestParams options:0 error:NULL];
第二行代码给 HTTPBody 的值是未经格式化的字典类型 requestParams ,并且覆盖了第一行代码给 HTTPBody 的值,正确的应该是 key=value&key2=value2
CTAPIBaseManager里的 isLoading 没有用到,loadDataWithParams方法直接设置isLoading为YES,没有对isLoading进行判断,如果是取消外面飞着的请求,让新发起的请求起飞,但代码里没有cancel外面飞着的请求代码,这是为什么?
我屏蔽了AIFServiceFactory相关的import代码,可以运行,现在想在
controller试着调用api,发现无从下手,谢谢~
在使用框架的过程中,我使用vc的dealloc调用[manager cancelAllRequests],最后在网络请求cancel了以后,由于页面被销毁,导致manager被销毁,
__strong typeof(weakSelf) strongSelf = weakSelf;
[strongSelf failedOnCallingAPI:response withErrorType:CTAPIManagerErrorTypeDefault];
上面的代码走不了正常的回调流程,有好的解决办法吗?
CTAPIBaseManager requestId和requestIdList是为扩展用的吗?因为在现在这种情况下,requestId一直为0;
CTAPIManagerErrorTypeNoNetWork 给这个错误,但是网络是通的,iPhone7,无线和蜂窝移动都不行。大佬麻烦您看一下,我要怎么改
- (BOOL)isReachable { if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusUnknown) { return YES; } else { return [[AFNetworkReachabilityManager sharedManager] isReachable]; } }
CTAppContext 第 160 行, AFNetworkReachabilityStatusUnknown 状态时为什么返回的不是 NO?
场景:用户登录第一次登录失败,再次点击登录,会报如下错误。
[AFHTTPRequestSerializer requestWithMethod:URLString:parameters:error:]: message sent to deallocated instance 0x6080002ab8e0
解决方案:修改CTRequestGenerator.m
1、将第 22 行 改为 @Property (nonatomic, weak) AFHTTPRequestSerializer *httpRequestSerializer;
2、将第 124 - 134 行注释去掉,再次运行问题得已解决。
问题原因我尚未分析清楚,有弄明白的哥们还请分享下。
请问下 这个和 FFNetworking有什么区别和优势
项目项目多个服务器支持
hi @casatwy
请问,AIFLoggerConfiguration.m 的作用是什么?AIFLoggerConfiguration.m 里面的变量,赋值之后好像就没使用了。AIFLogger 带上传log 功能吗?
我想将 RTNetworking 改造成可移植的库。
casa大神,如果在现有基础上支持HTTPS,有什么思路可以参考的?
你好,很喜欢你的网络层架构的思路,所以按照你的方法自己写了一个,因为项目较小所以做了些精简,基本的**还是用delegate代替block,然后每个接口用一个apiManager集成自baseApiMananger,对数据还是采用了datamodle的形式,但遇到一个问题 ,loaddata 和 loadnextpage 返回都会调用 - (void)managerCallAPIDidSuccess:(CTAPIBaseManager *)manager 方法,那如何区分是刷新还是下载下一页呢?通过 manager 的response 里面的数据去区分是个好方法吗?
GDMapService.m中的shouldCallBackByFailedOnCallingAPI方法总
// token 无效,重新登录
[[NSNotificationCenter defaultCenter] postNotificationName:kBSUserTokenIllegalNotification
object:nil
userInfo:@{
kBSUserTokenNotificationUserInfoKeyRequestToContinue:[response.request mutableCopy],
kBSUserTokenNotificationUserInfoKeyManagerToContinue:self
}];
此处kBSUserTokenNotificationUserInfoKeyManagerToContinue:对应self,这块self是service,
是不是应该是manager?或者service中有办法可以获得manager?
0 CoreFoundation | ___exceptionPreprocess + 228 |
---|---|
1 libobjc.A.dylib | objc_exception_throw + 56 |
2 CFNetwork | -[__NSCFURLLocalSessionConnection _tick_initialize] |
3 AFNetworking | __93-[AFURLSessionManager dataTaskWithRequest:uploadProgress:downloadProgress:completionHandler:]_block_invoke + 60 |
4 AFNetworking | url_session_manager_create_task_safely + 96 |
5 AFNetworking | -[AFURLSessionManager dataTaskWithRequest:uploadProgress:downloadProgress:completionHandler:] + 216 |
6 FlexibleAIFNetworking | -[AIFApiProxy callApiWithRequest:progress:success:fail:] + 340 |
7 FlexibleAIFNetworking | -[AIFApiProxy callGETWithParams:serviceIdentifier:methodName:fileName:additionalHTTPHeader:progress:success:fail:] + 328 |
8 FlexibleAIFNetworking | -[RTAPIBaseManager loadDataWithParams:] + 2104 |
9 FlexibleAIFNetworking | -[RTAPIBaseManager loadData] + 100 |
运行一个 https 请求总遇到 Error Domain=NSURLErrorDomain Code=-999 "cancelled" 搜了下资料说是sessionManager 提前被释放了,但是看了代码 sessionManager 并没有被释放,那么逐行排查到
CTApiProxy 代码 139 行 self.dispatchTable[requestId] = dataTask;
把这行代码注销了就能正常返回。请教下 casatwy 是什么原因?
由于 CTAPIManagerValidator 没声明获取最后验证错误信息的方法,所以在 CTAPIBaseManager 的方法里只能笼统地返回CTAPIManagerErrorTypeParamsError。有看到 CTAPIBaseManager 声明只读的 errorMessage 属性,理论上子类覆盖为 readwirte, 然后 CTAPIManagerValidator 验证的时候把错误信息写到它里面也可以传递出来,但这个事情和 CTAPIManagerValidator 更紧密,为什么不直接在它里面声明个 readonly 的类似 lastError 的属性呢?
除了需要建 很多借口类 以外。
当service的extraParmas有值时,查询是否有缓存和保存缓存数据用的requestParams不同,导致读取缓存失败。读缓存时url key未带上extraParmas,而保存时url key 有extraParmas。
在使用该网络库请求的时候,某一个请求总是返回status 0 ,
Error Domain Code: -999
Error Localized Description: 已取消
It seems that the content of section of Adding CTNetworking to your project is empty in README.Why no pack as a pod just as early version, so it can be used directly without adding source files or modifying implement of some method. Can we through some configure methods or other means archive the same effect, I consider these ways better than add source file to framework or modify implement of some method in framework.
请问这个项目能运行起来吗?
直接报错
AFNetworking 3.2版本,AFHTTPSessionManager以AFSSLPinningModeCertificate或者AFSSLPinningModePublicKey模式创建时,必须传进baseUrl,否则会crash,如下代码在3.2以下版本不会crash,升级到3.2就会
- (AFHTTPSessionManager *)sessionManager {
if (!_sessionManager) {
_sessionManager = [AFHTTPSessionManager manager];
_sessionManager.responseSerializer = [AFHTTPResponseSerializer serializer];
NSBundle *bundle = [NSBundle bundleForClass:[self class]];
NSSet<NSData *> *certs = [AFSecurityPolicy certificatesInBundle:bundle];
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:certs];
securityPolicy.allowInvalidCertificates = NO;
securityPolicy.validatesDomainName = YES;
_sessionManager.securityPolicy = securityPolicy;
}
return _sessionManager;
}
Components/Components/RTAPIBaseManager.m该文件中的failedOnCallingAPI:withErrorType:方法,是不是应该修改fetchedRawData。有时fetchedRawData会持有成功时的数据。
RTAPIManagerCallbackDataReformer的作用是明白了,但是具体实现有点迷茫,有没有具体的样例?
在gitter上提问请教但 没回复,也没找到 评论区在哪,只能在这个发个 issue,请教下 如下两个问题
- (void)dealloc { [self cancelAllRequests]; self.requestIdList = nil; }
CTAPIBaseManager 这里的 dealloc,取消所有的请求 是否不太合理,这样就要求 调用的地方 必须持有 发起请求的 实例才能正常接受到 回调,理论上 请求是否被取消 不应该跟 发起者的生命周期强依赖;
2、网络请求 都用delegate的方式来处理回调,按照 .key里面的解释 确实带来的非常多的好处。 如果遇到 这两种场景:1:A、B、C、D 这个作为一组 Batch请求 ;2:A、B、C、D 这个作为一组后者依赖前者回调结束才发起 的 Chain请求,请教 该如何优雅的实现?
为何不在调用api时直接传递请求的参数,而要额外写多一个方法去获取代理的参数呢?这样写有什么考虑,谢谢
您好,我现在在项目中使用CTNetworking进行接口调用,目前采取的还是传统的方式,调用方提供参数字典,将参数字典按键值对的形式拼接在methodName
的后面用问号分隔作为query
,组成完整的url。
现在项目改造,统一采用RESTful API,想请教一下这种情况下该怎么去构造url。
你好,
在 CTNetworkingConfigurationManager 有 serviceIsOnline property,然后 GDMapService 的 isOnline 是返回 CTNetworkingConfigurationManager 的 serviceIsOnline,如果在测试期间,有的 Service 要用到线上环境,有的用到线下环境,感觉由 CTNetworkingConfigurationManager 提供这个设置不太好,由 Service 各自控制会比较好些?
一个请求对应一个apiManager ?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.