传送对象到服务器

.h 文件中

h文件.png

代码如下

import <Foundation/Foundation.h>

@interface LBNetWorkManager : NSObject

+(LBNetWorkManager *)netManager;

-(void)Post:(NSString *)urlStr obj:(id)obj Success:(void (^)(id result))success Fault:(void (^)(id result))fault;

@end

这个够简单了吧
再来.m文件中


m文件1.png
m文件2.png
m文件3.png
m文件4.png
m文件5.png
m文件6.png

代码如下

import "LBNetWorkManager.h"

import<objc/runtime.h>

//定义成功的回调,接收传过来的block,在下载数据成功后回调到调用查询数据的地方
typedef void (^Success)(id result);
typedef void (^Fault) (id result);

@interface LBNetWorkManager()

//接收数据
@property (nonatomic,strong)NSMutableData * receiveData;

//使用copy是将block从栈转移到堆, 避免内存释放是栈上的被释放,如果那样子, 在调用处是无论如何都不能接收到返回数据
@property (nonatomic,copy)Success success;

@property (nonatomic,copy)Fault fault;

@end

@implementation LBNetWorkManager

+(LBNetWorkManager *)netManager{
//类方法创建对象, 最好每个请求都创建一个对象,这样子不会导致异步时的不确定性
LBNetWorkManager *netManager = [[LBNetWorkManager alloc]init];
return netManager;
}

pragma mark urlStr直接传入拼接的字符串 obj必须是传入一个对象

-(void)Post:(NSString *)urlStr obj:(id)obj Success:(void (^)(id result))success Fault:(void (^)(id result))fault{

//成功的回调,_suceess 的指针指向success,以后调用_success 就是调用success,下同
_success  = success;

//失败的回调
_fault  = fault;

//构建为请求url
NSURL * url = [NSURL URLWithString:urlStr];

//获取json格式的data
NSData *data = [self getJSON:obj];

//设置请求
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
//请求方式
[request setHTTPMethod:@"POST"];

//请求内容格式
[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

//请求体
[request setHTTPBody:data];

//开始连接
NSURLConnection * connection  = [[NSURLConnection alloc]initWithRequest:request delegate:self];

}

//当连接通了之后再做初始化

  • (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{

    //请求的返回信息
    NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;

    NSLog(@"%@",[res allHeaderFields]);

    self.receiveData = [NSMutableData data];
    }

//接收到服务器传输数据的时候调用,此方法根据数据大小执行若干次
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{

//信息是一个一个的来的 所以就需要将返回的信息追加到数据后面
[self.receiveData appendData:data];

}

//数据传完之后调用此方法
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{

 //将得到的信息转为字典
NSDictionary * dictAnalysis= [self receiveDataChangeTouchDictionary];
//在这里返回数据到调用处
_success(dictAnalysis);

}
//请求成功后,将返回的数据转换为字典

  • (NSDictionary *)receiveDataChangeTouchDictionary{
    //判断是否为空,为空则不转
    if (!_receiveData) {
    return nil;
    }
    NSError *error;
    //转为字典
    NSDictionary *dictAnalysis = [NSJSONSerialization JSONObjectWithData:self.receiveData options:NSJSONReadingMutableContainers error:&error];
    if(error) {
    NSLog(@"json解析失败:%@",error);
    return nil;
    }
    return dictAnalysis;
    }

//网络请求过程中,出现任何错误(断网,连接超时等)会进入此方法

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{

//返回错误信息,
_fault(error);

}

//获取json格式的数据
-(NSData*)getJSON:(id)obj{

return [self getJSON:obj options:NSJSONWritingPrettyPrinted error:nil];

}
-(NSData)getJSON:(id)obj options:(NSJSONWritingOptions)options error:(NSError*)error{

return [NSJSONSerialization dataWithJSONObject:[self getObjectData:obj] options:options error:error];

}
//将对象的属性和值对应起来, 作为字典的格式
-(NSDictionary*)getObjectData:(id)obj{

NSMutableDictionary
*dic = [NSMutableDictionary dictionary];

unsigned
int propsCount;

objc_property_t *props = class_copyPropertyList([obj class], &propsCount);

for(int i = 0;i < propsCount; i++){
    
    objc_property_t prop = props[i];
    
    NSString  *propName = [NSString stringWithUTF8String:property_getName(prop)];
    
    id value = [obj valueForKey:propName];
    
    if(value == nil) {
       value = [NSNull null];
    }
    
    else {
      value = [self getObjectInternal:value];
    }
    
    [dic setObject:value forKey:propName];
}
return dic;
}

-(id)getObjectInternal:(id)obj{

if([obj isKindOfClass:[NSString class]]
   || [obj isKindOfClass:[NSNumber class]]
   || [obj isKindOfClass:[NSNull class]]){
    
    return obj;
}

if([obj  isKindOfClass:[NSArray class]]) {
    
    NSArray *objarr = obj;
    
    NSMutableArray  *arr = [NSMutableArray arrayWithCapacity:objarr.count];
    
    for(int  i = 0;i < objarr.count; i++) {
        
        [arr setObject:[self getObjectInternal:[objarr objectAtIndex:i]] atIndexedSubscript:i];
    }
    
    return arr;
}

if([obj  isKindOfClass:[NSDictionary class]]) {
    
    NSDictionary  *objdic = obj;
    
    NSMutableDictionary  *dic = [NSMutableDictionary dictionaryWithCapacity:[objdic count]];
    
    for(NSString *key in objdic.allKeys){
      [dic  setObject:[self getObjectInternal:[objdic objectForKey:key]] forKey:key];
    }
    
    return  dic;
}

return [self getObjectData:obj];

}
@end

调用的时候

调用.png

代码如下
-(void)loginAction{
NSString * userName = [self makeInputStrToBeStandard:self.fieldUserName.text];
NSString * passWord = self.fieldPassWord.text;
NSString *URLStr = [NSString stringWithFormat:@"http://121.196.227.33:1688/api/%@",@"postSearch"];

LBLoginModel * loginModel = [[LBLoginModel alloc]initWithPhoneNumber:userName password:passWord];

loginModel.text  = [[LBLoginModelText alloc]init];
 loginModel.text.PhoneNumber = @"123";
 loginModel.text.WeiboId = @"234";

self.netManager = [LBNetWorkManager netManager];
[self.netManager Post:URLStr obj:loginModel Success:^(id result) {
    
} Fault:^(id result) {
    
}];

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容