iOS - AFNetWorking基础使用

iOS - AFNetWorking基础使用

思路:
- 有一个 BaseService 类,其他 Service 类继承该类。
- 同样地,有一个 BaseModel 类,其他 Model 类继承该类
- 在 BaseService 类中声明 AFHTTPRequestOperationManager 对象及 block 块

BaseService 类中 init 方法

- (instancetype)init
{
    self = [super init];
    if (self) {
        self.client = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:URL_BASE_SERVER]];
        self.client.requestSerializer = [AFJSONRequestSerializer serializer];
        self.client.responseSerializer = [AFJSONResponseSerializer serializer];
    }
    return self;
}

block 块声明于 BaseService.h 文件中

#import <Foundation/Foundation.h>
#import "AFNetworking.h"
#import "DataUtil.h"

typedef void(^CompletionHandler)(BOOL state,id object,NSError * error);
@interface BaseService : NSObject
S_PROPERTY(AFHTTPRequestOperationManager, client)
- (NSString *)getURLWithMainID:(int)mainID baseURL:(NSString *)baseURL;
@end

其中一个 Service 类中的方法:

#pragma -mark get guide list
- (void)getGuidesListWithCategoryId:(int)categoryId limit:(int)limit offset:(int)offset handler:(CompletionHandler)handler
{
    NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
    NSString * url = [self getURLWithMainID:categoryId baseURL:URL_GUIDES_LIST];
    if (limit >= 0) {
        [params setObject:SNumberWithInt(limit) forKey:@"limit"];
    }
    if (offset >= 0) {
        [params setObject:SNumberWithInt(offset) forKey:@"offset"];
    }
    [self.client GET:url parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSArray *array  = (NSArray *)responseObject;
        if (array) {
            NSMutableArray *result = [[NSMutableArray alloc] init];
            for (NSDictionary *object in array) {

                [result addObject:[self createGuideModel:object]];
            }
            handler(YES,result,nil);
        } else {
            handler(NO,nil,[NSError errorWithDomain:@"error" code:-1 userInfo:nil]);
        }
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        handler(NO, nil ,error);
    }];
}

#pragma mark -
- (GuideModel *)createGuideModel:(NSDictionary *)object
{
    if (!object) {
        return  nil;
    }
    GuideModel *guide = [[GuideModel alloc] init];
    guide.guideId = [object objectForKey:@"id"];
    guide.guideTitle = [object objectForKey:@"title"];
    guide.guideTime = [object objectForKey:@"time"];
    guide.guideName = [object objectForKey:@"name"];
    guide.guideCollectNums = [object objectForKey:@"collect_nums"];
    guide.guideCommentNums = [object objectForKey:@"comment_nums"];
    return guide;
}

在对应的声明该 model

@interface GuideModel : BaseModel

S_PROPERTY(NSString, guideId)

S_PROPERTY(NSString, guideTitle)

S_PROPERTY(NSString, guideName)

S_PROPERTY(NSString, guideImage)

S_PROPERTY(NSString, guideTime)

S_PROPERTY(NSString, guideCollectNums)

S_PROPERTY(NSString, guideLikeNums)

S_PROPERTY(NSString, guideCommentNums)
@end

其中

#define S_PROPERTY(__TYPE,__NAME) @property (strong, nonatomic) __TYPE *__NAME;

简单使用

- (void)loadDataWithFlag:(BOOL)flag {
    NSMutableArray *bottomArray = [NSMutableArray array];
    if (flag) {
        bottomArray = [NSMutableArray arrayWithArray:self.itemArray];
    }
    [self.service getActivityListWithLimit:15 offset:(int)bottomArray.count Handler:^(BOOL state, id object, NSError *error) {
        if (state) {
            [SVProgressHUD dismiss];
            [bottomArray addObjectsFromArray:object];
            self.itemArray = bottomArray;
            [self.tableView reloadData];
        } else {
            if (error) {
                NSString * errorString = [error.userInfo objectForKey:@"NSLocalizedDescription"];
                [SVProgressHUD showErrorWithStatus:errorString];
            }
        }
    }];
}

flag 标志为刷新加载更多而使用。
self.itemArray 为 tableView 数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值