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

2023-10-27

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

}];

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对象服务器文件服务器,传送对象到服务器 的相关文章

  • AVRCP协议介绍

    文章目录 1 AVRCP协议介绍 1 2 概念 1 2 1 1 2 2 role 用途 2 AVRCP框架 1 AVRCP协议介绍 1 2 概念 1 2 1 1 2 2 role CT controller 是一种通过向目标发送命令帧来启动
  • 静态编译和动态编译,java与javascript区别总结

    1 静态编译和动态编译 静态编译是程序在编译时就已经确定好了所有类之间的关系 要运行程序所有类 都缺一不可 若在开始运行时就把其中的某类文件丢失 就会产生 NoClassDefFoundError错误 程序会终止 在程序运行前的装载期间就把
  • flutter获取状态栏高度

    获取状态栏高度 import dart ui MediaQueryData fromWindow window padding top 系统默认的appBar等高度 位于Dart Packages flutter src material
  • 物理渲染学习笔记(三)——Cook-Torrance微表面模型

    从 Phong 到 GGX 光照模型林林总总 一直没能找机会梳理一遍 这几天依次都自己实现了一遍 也正好总结下 Microfacet 普通的着色模型假设着色的区域是一个平滑的表面 表面的方向可以用一个单一的法线向量来定义来定义 而 Micr
  • 程序员吃青春饭?程序员在35岁以后是否需要转行?你规划好了吗?

    都说程序员是一个吃青春饭的职业 都认为程序员到了35岁以后不转管理岗位就没有什么前途了 可能就要考虑换别的行业了 年龄越大可能越写不动代码了 那么程序员是不是35岁以后需要转行 我说说我自己的观点 关于程序员35岁之后是不是要转行这个问题
  • 区块链技术基础(笔记)

    一 区块链本质上是一个对等网络 peer to peer 的分布式账本数据库 二 区块链本身其实是一串链接的数据区块 其链接 指针是采用密码学哈希算法对区块头进行处理所产生的区块头哈希值 三 基本概念 1 数据区块 比特币的交易会保存在数据
  • Element ui 导航栏 刷新时高亮

    1 在组件中
  • 原理解析:JS 代码是如何被浏览器引擎编译、执行的?

    原理解析 JS 代码是如何被浏览器引擎编译 执行的 分析浏览器引擎对 JS代码的编译情况 并结合日常的 JavaScript开发经验 重新理解底层的编译解析机制 对其底层原理的理解 将有助于理解前端的跨端应用 以及一套代码生成多种小程序相关
  • csu 1809 Parenthesis 2016湖南省赛 G

    Problem acm csu edu cn csuoj problemset problem pid 1809 vjudge net contest 161962 problem G Reference blog csdn net l95
  • spring之bean注入的意义

    简而言之就是 首先 service注解在当前类的上边 表示在当前类是spring管理的一个bean 使用 autowired 将另外一个A类的实体bean注入到当前类中 让当前类具备那个A类的功能
  • Android SDK & AVD Manager

    0 前言 Android源码中的prebuilts devtools tools android程序可根据不同的参数来启动SDK Manager或AVD Manager 1 SDK Manager 1 启动 android or andro
  • Chrome 基于 Wappalyzer 查看网站所用的前端技术栈

    1 找到谷歌商店 https chrome google com webstore search wappalyzer utm source ext app menu 2 搜索 Wappalyzer 3 添加至Chrome 4 使用 插件
  • MySQL的脏读、幻读、不可重复读

    首先我们要知道 我们的脏读 幻读 不可重复读这些概念是在事务中的概念 脏读 也就是读取了未提交的数据 比如我开启了一个事务A 在里面操作一个用户表 获取里面一个用户的积分 比如此时这个用户的积分是100 此时有另外一个事务B也操作了这个用户
  • LD3320语音识别

    芯片介绍 LD3320 不需要外接任何辅助的Flash芯片 RAM芯片和AD芯片 就可以完成语音识别功能 每次识别最多可以设置50项候选识别句 每个识别句可以是单字 词组或短句 另一方面 识别句内容可以动态编辑修改 只需要主控MCU把识别关
  • 碎碎念,浅浅饮-------Day30

    这不是一篇关乎技术的文章 它偏离了我原本的计划轨迹 但是 相信它的意义会远超出任何一项技术带给我的价值 高考已经开始了 不知道在这片宁静的夜空下有多少人已经美美的睡了 香甜憨然 又有多少人这睡着的眼角还挂着泪滴 偶尔蹙起眉头 却也记载不下那
  • 固态硬盘接口类型介绍

    固态硬盘接口类型介绍 现在装机硬盘肯定会首选SSD 容量小一点不怕 后面再补一个机械硬盘不迟 SSD有着稳固和高速的优势 深受用户喜爱 然而SSD有着各种各样的尺寸和接口 并不是每一个用户的电脑都能通用 所以选购SSD硬盘前必须先了解SSD
  • ajax请求出现闪屏,jquery $.Ajax 火狐浏览器闪屏解决办法

    本文章介绍了关于jquery的async false Ajax 火狐浏览器闪屏解决办法 jquery的async false 这个属性 默认是true 异步 false 同步 代码如下 复制代码 ajax type post url pat
  • vue2知识点梳理

    Vue梳理 对于Vue 我们并不陌生 现在我们来梳理一下关于它的东西吧 知识点 1 生命周期 最基本的就是它的生命周期 beforeCreate 在 beforeCreate 生命周期函数执行时 data 和 methods 中的数据都还没
  • Open3D (C++) 点云按坐标值大小进行排序

    目录 一 概述 二 点云排序 三 结果展示 一 概述 如题 点云按坐标大小进行排序 二 点云排序 代码以按照Z坐标的大小按照从小到大进行排序为例 include

随机推荐

  • java输出1~100之间的全部素数的5种方法

    文章目录 一 前言 二 需求分析 2 1 什么是素数 2 2 分析 三 代码实现 3 1 方法一 根据素数的定义来遍历检查 3 2 方法二 根据判断条件2进行遍历检查 减少遍历次数 3 3 方法三 根据判断条件3进行遍历检查 减少遍历次数
  • 达梦数据库调优组合索引的使用

    调优工程中对组合索引的使用的一个小总结 一 组合索引的执行计划 首先关于几个概念 等值条件和范围条件 1 等值条件 C1 X C1 X OR C1 Y 会被优化成C1 IN X Y C1 IN X Y 这种形式的我们都叫做等值条件 2 范围
  • Linux 安装Xrdp,实现RDP连接

    linux 安装xrdp RDP 连接 安装前提 root 权限 root server 76 conf yum install xrdp root 权限 安装 yum install xrdp Loaded plugins fastest
  • Eigen不同的方法来求矩阵的逆的效率

    背景 不同尺寸的矩阵 求逆使用不同的方法 会有不同的效率的 16x16矩阵的直接求逆与PartialPivLU的效率对比 本人亲测 1 实现代码 GetSystemTimeInMacroSecond的实现 boost posix time
  • 自适应卡尔曼滤波_【导师论坛】

    复杂噪声情况下的新型卡尔曼滤波器研究 主讲 黄玉龙 副教授 哈尔滨工程大学 时间 2019年1月17日 周四 14 30 16 30 地点 智能科学学院主楼401会议室 主讲人介绍 黄玉龙 博士 哈尔滨工程大学自动化学院副教授 2018年1
  • 远程代码执行漏洞的利用与防御

    什么是RCE漏洞 全称 remote command code execute 分为远程命令执行和远程代码执行 1 命令执行漏洞 直接调用操作系统命令 2 代码执行漏洞 靠执行脚本代码调用操作系统命令 一般出现这种漏洞 是因为应用系统从设计
  • 第十届蓝桥杯省赛Java B组 数的分解

    试题 D 数的分解 本题总分 10 分 问题描述 把 2019 分解成 3 个各不相同的正整数之和 并且要求每个正整数都不包 含数字 2 和 4 一共有多少种不同的分解方法 注意交换 3 个整数的顺序被视为同一种方法 例如 1000 100
  • mysql 数据恢复 binlog

    被删库勒索的一次记录 项目在云服务器运行了一年多了 中间迁移过一次 从阿里迁到华为了 迁移的时候把数据库文件 test sql 用完了之后就扔在了服务器上 最近访问系统的时候 忽然系统崩溃 表不存在了 数据库连接工具也连不上了 到服务器上的
  • torch.fx介绍

    Node Node类构造函数的各项参数如下 参考torch fx下的node py graph 指明实例化的Node属于哪个Graph op 节点的类型 一共有如下的几种类型 placeholder 占位符 一般代表输入 call meth
  • 【LeetCode刷题】169 多数元素

    给定一个大小为 n 的数组 找到其中的多数元素 多数元素是指在数组中出现次数 大于 n 2 的元素 你可以假设数组是非空的 并且给定的数组总是存在多数元素 方法一 HashMap 每个值初始value都为1 每重复一次 value 1 最后
  • 深度学习部署:Triton(Triton inference server)【旧称:TensorRT serving,专门针对TensorRT设计的服务器框架,后来变为Triton,支持其他推理后端】

    triton作为一个NVIDIA开源的商用级别的服务框架 个人认为很好用而且很稳定 API接口的变化也不大 我从2020年的20 06切换到2022年的22 06 两个大版本切换 一些涉及到代码的工程变动很少 稍微修改修改就可以直接复用 很
  • Java导出数据库查询结果为excel和csv的简易实现

    转载请注明来源 作者 loongshawn http blog csdn net loongshawn article details 53457953 建议读者阅读原文 确保获得完整的信息 1 背景 最近在应对一个数据查询导出模块 总体要
  • 使用ESP32开发LVGL

    基础概念 LVGL 在ESP32上使用版本差别是比较大的 主要有V7和V8的区别 具体应该是适配性以及一些比较高级的控件 相较而言感觉V7会更加稳定 在ESP32移植的话可以参考这个链接 但是其中也有一些小细节需要注意 具体注意点 首先如果
  • Python Selenium其他使用方法

    知识点 掌握selenium控制标签页的切换 掌握selenium控制iframe的切换 掌握 利用selenium获取cookie的方法 掌握 手动实现页面等待 掌握 selenium控制浏览器执行js代码的方法 掌握selenium开启
  • EDA笔记(1)--VHDL语言

    目的 摘录点自己容易忘的知识点 也可以供读者参考学习 EDA技术的概念 工作平台 计算机 开发环境 EDA软件 设计语言 硬件描述语言 HDL 试验载体 可编程逻辑器件 PLD 目标器件 ASIC芯片 应用方向 电子系统设计 EDA应用领域
  • LVM磁盘挂载&扩容

    磁盘不够了怎么使用逻辑卷的方式扩充磁盘呢 因为之前踩过坑 用混了fdisk和mount挂载 这次梳理下LVM挂盘和扩容方式 下载lvm2 预先下载程序包 若已下载则忽略 yum y install lvm2 离线下载可上腾讯软件源把rpm包
  • mysql数据库

    索引相当于字典的目录 用于查找数据 一般用B Tree索引 用该种数据结构来存储索引 InnoDB mysql的存储引擎 支持事务安全的引擎 支持外键 行锁 事务是他的最大特点 如果有大量的update和insert 转载于 https w
  • 玩转ChatGPT:Code interpreter (vol. 1)

    一 写在前面 喜大普奔 GPT 4传说中的Code interpreter插件已经可以用了 二 什么是Code interpreter 代码解释器 Code Interpreter 是一个工具 它能够读取和执行编程代码 这里有几个主要的功能
  • 如何将项目部署到服务器:从选择服务器到维护应用程序的全流程指南

    将项目部署到服务器是一个重要的技能 对于开发人员来说 它是必不可少的 在本文中 我将介绍一些关于如何将项目部署到服务器的最佳实践 一 选择服务器 在部署项目之前 你需要先选择一个适合你的服务器 如果你已经有一个可用的服务器 你可以直接使用它
  • 对象服务器文件服务器,传送对象到服务器

    h 文件中 h文件 png 代码如下 import interface LBNetWorkManager NSObject LBNetWorkManager netManager void Post NSString urlStr obj