Giter Site home page Giter Site logo

ytknetwork's People

Contributors

averyliu avatar demonnico avatar extrajordanary avatar forkpanda avatar huang-libo avatar joeshang avatar lancy avatar ll128 avatar maojj avatar skyline75489 avatar songzeyao avatar tangqiaoboy avatar urakalee avatar veecci avatar zy9 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ytknetwork's Issues

关于chain和batch

弱弱的问下

为什么YTKBatchRequest 没有选择AF自己的 batchOfRequestOperations 那样使用 dispatch_group 而是使用计数

YTKChainRequest没有选择 addDependency

...

关于连接超时的设置

目前看好像连接超时是一分多钟后响应failure

    Error Domain=NSURLErrorDomain Code=-1001 "The request           timed out."

不知道是否可以有设置超时时间, 比如30秒.AF 里是有此设置

YTKNetworkConfig 中未看到相关属性设置

关于上传进度的问题

您好,我想用咋的库实现多张图片按队列一张一张的上传,我想获得每一张图片的上传进度和总的图片组的上传进度,如何获得?

Response serializer添加content-type

遇到一个问题

Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptable content-type: text/plain"

现在暂时的解决方案是修改了YTKNetworkAgent里的代码:

- (id)init {
    self = [super init];
    if (self) {
        ...
        _manager = [AFHTTPRequestOperationManager manager];
        ...
        [self addMissingContentTypes];
    }
    return self;
}

- (void)addMissingContentTypes {   
    NSArray *types = @[@"text/plain", otherContentType];
    NSSet *contentTypes = [_manager.responseSerializer.acceptableContentTypes setByAddingObjectsFromArray:types];
    _manager.responseSerializer.acceptableContentTypes = contentTypes;
}

但是修改源码终究是不太好,能改进一下,提供自定义responseSerializer.acceptableContentTypes的地方么?或者有现成的我没找到?求助 THANKS!😄

一个YTKRequest子类只能处理一个api地址的网络请求吗?

感谢提供这样的一个框架,我想问的是我们一般是一个模块中会发起4,5个不同的api请求,那是否要创建4,5个不同名称的YTKRequest子类分别处理不同的网络请求吗?那是不是挺麻烦的,有能用一个类处理多个api地址的方法吗。
比如:UserApi类中,有/getUserInfo/:id ,/login/:name/:pwd, /changename/:id/newname 这样的3个不同的api类,那我要创建3个YTKRequest子类吗,能不能只创建一个YTKRequest类,在同一个类中处理这3个网络请求呢。
谢谢!

增加介绍文档内容

麻烦 @lancy 在高级用法一节,增加 定制 buildCustomUrlRequest 相关的介绍,我已经放好 TODO 在ProGuide.md 里了。

PATCH方法不支持?

查看了YTKNetwork支持的http动词,发现没有PATCH,是什么原因不支持PATCH呢?
typedef NS_ENUM(NSInteger , YTKRequestMethod) {
YTKRequestMethodGet = 0,
YTKRequestMethodPost,
YTKRequestMethodHead,
YTKRequestMethodPut,
YTKRequestMethodDelete,
};

如何接受请求到的json数据?

我写了个类试用了一下,但是不知道如何接受请求到的json数据,返回的数据在responseString里,而不是responseJSONObject里:
//.h文件

import <Foundation/Foundation.h>

import "YTKRequest.h"

@interface MeiTuAPI : YTKRequest

@Property (nonatomic, strong) NSNumber *siteID;
@Property (nonatomic, strong) NSNumber *typeID;
@Property (nonatomic, strong) NSNumber *styleID;
@Property (nonatomic, strong) NSNumber *pSize;
@Property (nonatomic, strong) NSNumber *page;

@EnD

//.m文件

import "MeiTuAPI.h"

@implementation MeiTuAPI

-(instancetype)init{
if (self = [super init]) {
self.siteID = @1;
self.typeID = nil;
self.styleID = nil;
self.pSize = @20;
self.page = @1;
}
return self;
}

-(NSString *)baseUrl{
return BaseUrl;
}

-(NSString *)requestUrl{
return Url_amazingPicsList;
}

-(YTKRequestMethod)requestMethod{
return YTKRequestMethodPost;
}

  • (id)requestArgument{
    NSMutableDictionary *patameters = [NSMutableDictionary dictionary];
    if (self.siteID) {
    [patameters setObject:self.siteID forKey:@"site_id"];
    }
    if (self.typeID) {
    [patameters setObject:self.typeID forKey:@"type_id"];
    }
    if (self.styleID) {
    [patameters setObject:self.styleID forKey:@"fg_id"];
    }
    if (self.pSize) {
    [patameters setObject:self.pSize forKey:@"pSize"];
    }else{
    [patameters setObject:@20 forKey:@"pSize"];
    }
    if (self.page) {
    [patameters setObject:self.page forKey:@"p"];
    }else{
    [patameters setObject:@1 forKey:@"p"];
    }
    return patameters;
    }

@EnD

//调用

  • (void)loadData{
    MeiTuAPI *request = [[MeiTuAPI alloc]init];
    request.siteID = @2;
    request.pSize = @10;

    [request startWithCompletionBlockWithSuccess:^(YTKBaseRequest *request) {
    if (request.responseStatusCode != 0) {
    NSLog(@"%@",request.responseString); //有数据
    NSLog(@"%@",request.responseJSONObject); //返回nil
    }

    } failure:^(YTKBaseRequest *request) {

    }];
    }

按照YTKChainRequest的例子,但是里面的代码不执行,没访问过API!

代码如下,

- (void)viewDidLoad
{
    [super viewDidLoad];

SportsApi *api = [[SportsApi alloc] init];
    YTKChainRequest *chainRequest = [[YTKChainRequest alloc] init];
    [chainRequest addRequest:api callback:^(YTKChainRequest *chainRequest, YTKBaseRequest *baseRequest) {
        SportsApi *result = (SportsApi *)baseRequest;
        self.sports = result.responseJSONObject;
        FavoriteSportsApi *nextApi = [[FavoriteSportsApi alloc] initWithMethod:@"GET"];
        [chainRequest addRequest:nextApi callback:^(YTKChainRequest *chainRequest, YTKBaseRequest *baseRequest) {
            FavoriteSportsApi *result = (FavoriteSportsApi *)baseRequest;
            self.selectedSports = result.responseJSONObject;
            self.tempSelectedSports = self.selectedSports.mutableCopy;
        }];
    }];
    chainRequest.delegate = self;
}
- (void)chainRequestFinished:(YTKChainRequest *)chainRequest {
    [self.tableView reloadData];
}

- (void)chainRequestFailed:(YTKChainRequest *)chainRequest failedBaseRequest:(YTKBaseRequest*)request {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"异常提示" message:@"网络异常" delegate:self cancelButtonTitle:@"确定" otherButtonTitles: nil];
    [alert show];
}

使用YTKBatchRequest类承载多个Request请求,不走block方法

#import "YTKRequest.h"

@interface GetImageApi : YTKRequest
@end

#import "GetImageApi.h"

@implementation GetImageApi
- (id)init
{
    self = [super init];
    if (self) {
    }
    return self;
}
- (NSString *)requestUrl {
    return @"?mod=stand&op=forumtj";
}
- (YTKRequestMethod)requestMethod {
    return YTKRequestMethodPost;
}

@end

/////////////////////////////////
#import "YTKRequest.h"

@interface GetUserInfoApi : YTKRequest

- (id)initWithType:(NSString *)type;

@end

#import "GetUserInfoApi.h"

@implementation GetUserInfoApi {
    NSString *_type;
}

- (id)initWithType:(NSString *)type {
    self = [super init];
    if (self) {
        _type = type;
    }
    return self;
}

- (NSString *)requestUrl {
    return @"?mod=home&op=favorite";
}
- (YTKRequestMethod)requestMethod {
    return YTKRequestMethodPost;
}
- (id)requestArgument {
    return @{ @"token": @"YOeQWfl5shWJSKccidIf9AzdiRPI",
              @"type":_type,
              @"page":@(1)
              };
}
@end

////////////////////////////////////////////////////////////////////
@interface ViewController ()

@end

@implementation ViewController

/// Send batch request
- (void)sendBatchRequest {

  GetImageApi *a = [[GetImageApi alloc] init];
    GetUserInfoApi *b = [[GetUserInfoApi alloc] initWithType:@"all"];

    [a startWithCompletionBlockWithSuccess:^(YTKBaseRequest *request) {
        NSLog(@"respond11111 = %@",request.responseJSONObject);

    } failure:^(YTKBaseRequest *request) {

    }];

    [b startWithCompletionBlockWithSuccess:^(YTKBaseRequest *request) {
        NSLog(@"respond22222 = %@",request.responseJSONObject);
    } failure:^(YTKBaseRequest *request) {

    }];
}

2015-02-11 21:42:29.001 YTKNetworkDemo[1070:55786] Add request: GetImageApi
2015-02-11 21:42:29.013 YTKNetworkDemo[1070:55786] Add request: GetUserInfoApi
2015-02-11 21:42:29.439 YTKNetworkDemo[1070:55786] Finished Request: GetUserInfoApi
2015-02-11 21:42:31.804 YTKNetworkDemo[1070:55786] respond22222 = {
data = (
{
dateline = "4\U5c0f\U65f6\U524d";
description = "";
favid = 127;
icon = "http://i.gugubaby.com/dz/static/image/feed/discuz.gif";
id = 286;
idtype = fid;
spaceuid = 0;
title = "\U6cf0\U5c71-\U4e94\U5cb3\U4e4b\U5c0a";
uid = 190;
url = "http://i.gugubaby.com/dz/BAPI/index.php?mod=forum&op=forumdisplay&ver=1.0&app=ios&fid=286";
},
{
dateline = "9\U5c0f\U65f6\U524d";
description = "";
favid = 124;
icon = "http://i.gugubaby.com/dz/static/image/feed/discuz.gif";
id = 319;
idtype = fid;
spaceuid = 0;
title = "\U5e16\U5b50\U6d4b\U8bd5";
uid = 190;
url = "http://i.gugubaby.com/dz/BAPI/index.php?mod=forum&op=forumdisplay&ver=1.0&app=ios&fid=319";
},

2015-02-11 21:42:31.836 YTKNetworkDemo[1070:55786] Request queue size = 1
2015-02-11 21:42:31.836 YTKNetworkDemo[1070:55786] Finished Request: GetImageApi
2015-02-11 21:42:31.837 YTKNetworkDemo[1070:55786] respond11111 = {
data = {
list = (
{
addtime = 1423117172;
dateline = "2015-02-05 14:19";
fid = 250;
fup = 214;
id = 4;
imgurl = "http://i.gugubaby.com/dz/BAPI/admins/resource/uploadfile/imgfile/";
lastpost = "";
lastposter = "";
lastsubject = "";
name = "\U957f\U5b59\U65e0\U5fcc";
replies = "";
views = "";
},
{
addtime = 1423117241;
dateline = "2015-02-05 14:20";

用YTKBatchRequest 来承载请求不走block 方法,求解决,具体看下面:

/// Send batch request
- (void)sendBatchRequest 
{

    GetImageApi *a = [[GetImageApi alloc] init];
    GetUserInfoApi *b = [[GetUserInfoApi alloc] initWithType:@"all"];

//    [a startWithCompletionBlockWithSuccess:^(YTKBaseRequest *request) {
//        NSLog(@"respond11111 = %@",request.responseJSONObject);
//        
//    } failure:^(YTKBaseRequest *request) {
//        
//    }];
//    
//    [b startWithCompletionBlockWithSuccess:^(YTKBaseRequest *request) {
//        NSLog(@"respond22222 = %@",request.responseJSONObject);
//    } failure:^(YTKBaseRequest *request) {
//        
//    }];

    YTKBatchRequest *batchRequest = [[YTKBatchRequest alloc] initWithRequestArray:@[a, b]];
    [batchRequest startWithCompletionBlockWithSuccess:^(YTKBatchRequest *batchRequest) {
        NSLog(@"succeed"); //此处不走
        NSArray *requests = batchRequest.requestArray;
        GetImageApi *a = (GetImageApi *)requests[0];
        GetUserInfoApi *b = (GetUserInfoApi *)requests[1];
        // deal with requests result ...
        NSLog(@"a = \n%@, b = \n%@", a.responseJSONObject, b.responseJSONObject);
    } failure:^(YTKBatchRequest *batchRequest) {
        NSLog(@"failed");
    }];
}

2015-02-11 22:00:22.616 YTKNetworkDemo[1106:60745] Add request: GetImageApi
2015-02-11 22:00:22.620 YTKNetworkDemo[1106:60745] Add request: GetUserInfoApi
2015-02-11 22:00:22.621 YTKNetworkDemo[1106:60745] Request queue size = 1
2015-02-11 22:00:22.626 YTKNetworkDemo[1106:60745] Request queue size = 0
2015-02-11 22:00:22.658 YTKNetworkDemo[1106:60745] Finished Request: (null)
2015-02-11 22:00:22.659 YTKNetworkDemo[1106:60745] Request queue size = 0
2015-02-11 22:00:22.659 YTKNetworkDemo[1106:60745] Finished Request: (null)
2015-02-11 22:00:22.659 YTKNetworkDemo[1106:60745] Request queue size = 0

快速重复创建并取消请求,会导致报double free错误,然后崩溃

连续快速调用如下方法会导致程序崩溃。调用次数不确定,有时候四五次,有时候更多的时候崩溃。

  • (void)getAutoComplateWithKeyWord:(NSString *)keyWord {

    if (self.autoComplateRequest.isExecuting) {
    [self.autoComplateRequest stop];
    }

    self.autoComplateRequest = [[QYAutoComplateRequest alloc] initWithKeyWord:keyWord];
    self.autoComplateRequest.isShowToast = NO;

    [self.autoComplateRequest startWithSuccess:^(id results, QYRequest *request) {

    if (request != self.autoComplateRequest) {
        return;
    }
    
    if (!self.isSearching) {
    
        if ([results isKindOfClass:[NSDictionary class]]) {
    
            self.searchKeyWords = results[@"entry"];
    
        }
    
    }
    

    } failure:^(QYRequestType type, QYRequest *request) {

    }];

}

一个问题 YTKBatchRequest.m

当stop request的时候 在stop消息中以及其中的clearRequest 重复调用了[self ...stopCallBack]的响应stop的回调方法

YTKNetwork 如何在一个统一的地方输出request构造之后的url

因为使用requestUrl和requestArgument构造url所以,不知道到底请求的url是什么?想统一log出来看下

- (NSString *)requestUrl
{
    return @"/auth/login";
}
- (id)requestArgument
{
    return @{
             @"Account": _account,
             @"Password": _passwd
             };
}

目前我的做法是在YTKNetworkAgent的addRequest:方法中打印出来

YTKRequestMethod method = [request requestMethod];
NSString *url = [self buildRequestUrl:request];
NSLog(@"url => %@", url);

如何在设置了cacheTimeInSeconds缓存这种情况下更新缓存。

请问当我在Api中设置了cacheTimeInSeconds值大于0,但我又想在有些时间强制从网络去取数据,那该怎么做呢?
看到有个 startWithoutCache方法,但是不支持Block,请问如何操作?是不是我需要在每次请求的时候动态设置 cacheTimeInSeconds 大于0或等于0来区分从网络取数据还是从缓存取数据?

Comments improvement.

方法或者类的注释请用 /// 或者 /** */ 的注释方式,这样能在Quick Help中看见注释。

使用 // 的注释,Xcode不会显示出来,在使用的时候需要跳转到源文件查看注释。
bs plypejoj5bo4a 7b72 1

使用 /// 或 /** */ 的注释,可直接在Xcode中查看,右上角的Quick Help中也可以查看。
0dry 5bv6 z4 xuk0wte0

希望改进呀,现在对YTKNetwork还不是很熟悉,所以查看文档的次数比较多,每次都跳转到源文件看注释实在是太麻烦了,^_^ 期待改进

AFNetworking第三方依赖关系

从YTKNetwork库来看的话,目前的AFNetworking并不是由cocospod管理起来的,那么问题来了,如果AFNetworking版本更新了,YTKNetworking如何更新第三方库?

如何在基类统一处理响应返回

比如我的接口返回都是统一的 code,msg,data . 当 code不为1000时候, 返回错误信息.
我如何在基类判断responseJSONObject, 当返回的 json中code不为1000. 不走 sunccess的 block, 而走 false的 block.并且带回错误的 msg? 是写一个基类, 继承YTKRequest?
3Q

关于YTKRequest的子类

YTKNetwork的**, 是不是每个请求都必需建立一个 YTKRequest 的子类。 如果是这样,有很多请求就建很多子类会不会很繁锁

请教如何用mantle把model转换成json字符串

不好意思,看到你们这边也用了mantle,在这里想请教一下如何用mantle把复杂的model转换成json字符串,用jsonModel有个toJSONString方法是可以直接把model转换成json字符串的,包括一些承继和复杂的自定义对象都可以转换出来,但总找不到如果用mantle把model转成json字符串。只找到一个把model转成NSDictionary,
NSDictionary *jsonDictionary = [MTLJSONAdapter JSONDictionaryFromModel:notice];
请教如何能转换成json字符串呢。
不甚感激!

Demo needed

给个例子吧。demo里面貌似什么都没有的

如何实现传递参数可选功能?

比如说有一个接口UpdateInfoApi有三个参数:A、 B、C。只有A参数是必须参数,B、C参数是可选参数。能够实现这样的需求么?
实现了requestArgument方法如下,这样是所有参数都传递了。能只传必须参数么?

- (id)requestArgument
{
    return @{ @"UserId": @(_userId), @"B": @(xxx), @"C": @(yyy) };
}

如何利用YTKChainRequest如何实现根据上一个请求得到的内容开始另外一个请求?

对于您分享的YTKNetwork网络库本人很感兴趣,所以就想尝试下所有的功能。但是,在尝试“支持方便地设置有相互依赖的网络请求的发送”这条功能时候遇到了如下几个问题。

1.如何设置根据请求A的返回内容去判断请求B还是请求C。(可能是我理解的不对,请点拨)
2.若请求A结束了,根据内容判断需要请求C,但是在请求C结束后需要再请求B,这样的功能YTKNetwork是否能够实现。

最后非常感谢您分享这个网络类,从中我学到了很多。

请问有相应的androidth版本吗?

感谢提供这么个好框架,已经用在我们的项目中,请问一下YTKNetwork有对应的Android版本吗,或有类似这样的提供缓存,封装的第三方库吗。
谢谢

缓存网络请求是根据请求的URL来做缓存还是?

在缓存网络请求时,是根据请求的地址URL还是URL+请求参数来做缓存的呢?
比如有这种情况,有一个接口地址URL。有几个可选参数,可选参数不同返回的数据不同。
当通过这个URL请求数据,设置不同的参数,返回不同的数据。这时是根据什么来做缓存的呢?

ReadMe中说的“正在加载的HUD插件”在哪里?

我看了YTKNetwork的功能介绍里面有一条:
定义了一套插件机制,可以很方便地为 YTKNetwork 增加功能。猿题库官方现在提供了一个插件,可以在某些网络请求发起时,在界面上显示"正在加载"的 HUD。
但是在代码中并没有找到可以调用的接口,可以告诉我接口在哪里吗?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.