对象服务器文件服务器,传送对象到服务器

.h 文件中

e9ff072c7717

h文件.png

代码如下

import

@interface LBNetWorkManager : NSObject

+(LBNetWorkManager *)netManager;

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

@end

这个够简单了吧

再来.m文件中

e9ff072c7717

m文件1.png

e9ff072c7717

m文件2.png

e9ff072c7717

m文件3.png

e9ff072c7717

m文件4.png

e9ff072c7717

m文件5.png

e9ff072c7717

m文件6.png

代码如下

import "LBNetWorkManager.h"

import

//定义成功的回调,接收传过来的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

调用的时候

e9ff072c7717

调用.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) {

}];

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值