网络中常用的第三方库使用方法汇总
一. SDWebImage使用注意事项-------------------------------------------------------------------------------------------------------
1. 导入SDWebImage第三方库
2. 将Build Settings 中的Compile Sources 里面的所有SD...开头的都加上 -fno-objc-arc(一共需要加5个)
3. 在Info.plist中添加NSAppTransportSecurity类型Dictionary。
在NSAppTransportSecurity下添加NSAllowsArbitraryLoads类型Boolean,值设为YES
4. 在需要使用的控制器中导入UIImageView+WebCache.h头文件
二. AFNetworking使用注意事项-------------------------------------------------------------------------------------------------------
1. 导入AFNetworking第三方库
2. 在Info.plist中添加NSAppTransportSecurity类型Dictionary。
在NSAppTransportSecurity下添加NSAllowsArbitraryLoads类型Boolean,值设为YES
3. 导入头文件
三. Hash 使用注意事项-------------------------------------------------------------------------------------------------------
1. MD5是一个哈希散列算法
方法:CCMD5 可以获取MD5的16个字符的数组,在通过%02X的形式输出即可获得32位的MD5值
MD5只能称为一个不可逆的加密算法,只用用于作为一些校验的过程 注意:只要加密了不能恢复原文
MD5的特点
压缩性:不管原文任意长度,进行MD5加密之后长度都是固定的 32位
容易计算:从原数据计算出的MD5值比较容易 (iOS只需调用一个方法就可以)
抗修改性:对原数据进行任何的改动,哪怕修改了一个字符,得到的加密结果MD5值都会发生很大变化
抗碰撞:已知原数据和其MD5值,想找到一个具有相同的MD5值的数据是非常困难的
2. 导入Hash文件夹
3. 使用时导入NSString+Hashing.h头文件
四. ASIHttpRequst 使用注意事项-------------------------------------------------------------------------------------------------------
1. 导入ASIHttpRequst文件夹
2. 将Build Settings 中的Compile Sources 里面的所有ASI...开头和Reachability.m的都加上 -fno-objc-arc(一共需要加9个)
3. 在Build Settings 中的 Link Binary With Libraries 中导入CFNetwork.framework系统库 和lib.tbd
4. 在Info.plist中添加NSAppTransportSecurity类型Dictionary。
在NSAppTransportSecurity下添加NSAllowsArbitraryLoads类型Boolean,值设为YES
五. MJRefresh使用注意事项(可参考MJRefresh-Demo)---------------------------------------------------------------------------------------
1.设置成员变量 _page 调用第一次 _page = 1 的页面 刷新请求
2.配置下拉和上拉的头部和底部
3.下拉的刷新时候 需要将_page修改为1
4.并且需要将 数据源数组 原有的数据全部清空 然后请求网络
5.上拉加载更多的时候 增加页数(_page++) 然后网络数据请求
6.谨记:当网络请求之后别忘了结束上下刷新的视图
[_tableView.mj_header endRefreshing];
[_tableView.mj_footer endRefreshing];
7.为了防止用户刷新过快,防止可变数组第一次刷新被清空后,它的数组元素个数是0 ,数据还没有响应回来紧接着进行第二次刷新, 这时候就会从空数组中去取元素, 所以会崩溃
if (_dataArray.count != 0) { //_dataArray数据源数组
cell.textLabel.text = _dataArray[indexPath.row];
}
六. GData使用注意事项 (可参考GData-Demo)👉 ----------------------------------------------------------------------------------------------
1. 准备工作:首先在Bulid Settings 中的 search Paths 中的 Header Search Paths(在收索框中输入sear即可快速看到)中加入(双击可加入) /usr/include/libxml2
2. 然后在 Build Phases 中 Link Binary With Libraries 中加入 libxml2.tbd (名字不要加错)
3. 使用时 导入头文件 GDataXMLNode.h
4. 然后进行XML解析 —>创建一个XML文档器对象 —>通过Document的RootElement这个方法 取到xml数据中的根元素
XML解析的方法:👉
1. 创建一个XML文档器对象 这个对象相当于一个XML容器 里面放有xmlStr中所有的数据,用于后续的解析 编码格式UTF-8 GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithXMLString:xmlStr encoding:NSUTF8StringEncoding error:nil];
2. 通过Document的RootElement这个方法 取到xml数据中的根元素,xml每个元素都是一个GDataXMLElement的实例(对象) GDataXMLElement *root = [document rootElement];
3. [root childAtIndex:<#(unsigned int)#>] 取出root中下标为0的子节点(元素) 这个方法类似于数组中的objectAtIndex:
4. [对象 elementsForName:<#(NSString *)#>] 这个方法就是根据名字取节点(xml元素),返回类型是数组
5. 元素的stringValue属性就是取出元素中的值 ,stringValue是打印节点中所有里面中间的值
用路径方式去解析xml:👉
绝对路径: 定义绝对路径 —>元素在XML数据中是绝对路径,通过这个方法将每个元素放到数组中
[document nodesForXPath:<#(NSString *)#> error:<#(NSError *__autoreleasing *)#>];这个方法是根据路径取出元素(节点)返回到数组里
相对路径: xPAth 语句 :相对路径://+ 元素名字,这样能在xml文件中取到任何位置的元素,然后也是通过nodesForXPath:方法将元素放到数组中
七. kissXML(DDXML)使用注意事项:(可参考kissXML-Demo)👉 —————————————————————————————————————
1. 准备工作:首先在Bulid Settings 中的 search Paths 中的 Header Search Paths(在收索框中输入sear即可快速看到)中加入(双击可加入) /usr/include/libxml2(同六中的图)
2. 然后在 Build Phases 中 Link Binary With Libraries 中加入 libxml2.tbd (名字不要加错)
3. 使用方法与GData类似(同六中的图)
八. JSONModel使用注意事项:👉 ———————————————————————————————————————————————
1.不需要加任何东西,只需要更改Info.plist文件
在Info.plist中添加NSAppTransportSecurity类型Dictionary。
在NSAppTransportSecurity下添加NSAllowsArbitraryLoads类型Boolean,值设为YES
2.创建模型 继承JSONModel
注意:模型数据中申请的成员变量必须与想要取出的元素名字完全一样
解决办法:myModel.m中
重写此方法 为了防止后台接口给我们的key和我们Xcode中属性名有冲突(不一致)
+ (JSONKeyMapper *)keyMapper {
//根据字典得到JSONKeyMapper 对象,字典里面的键值对 key是后台接口给我们的字段 value 对应本模型中的属性
return [[JSONKeyMapper alloc] initWithDictionary:@{@"author":@"auther"}];
}
3. 加入<Optional>防止后台在下发数据的时候,可能修改了某个字段或者缺少了某个字段,一旦缺失了就会导致本模型和接口无法对应,防止这种情况发生 在类型后面加上<Optional>
@property(nonatomic, copy) NSString<Optional> *subject;
4.调用 myModel *model = [[myModel alloc] initWithDictionary:resultList[0] error:nil];
原理KVC —> setValue:forKey:这个方法 用for遍历 记住保证key的正确性
5. 将模型转换成字典:[model toDictionary];
将模型转换成JSONData:[model toJSONData];
九. FMDB使用注意事项:👉 不需要配置Info.plist文件(可参考FMDB-Demo) —————————————————————
1. 首先导入FMDB文件 然后在Build Phases 中的 Link Binary With Libraries 中加入 libsqlite3.tbd
2. 创建一个继承NSObject的管理者FMDManager 在.h 文件中添加#import "FMDatabase.h"
3. 创建成员变量_dataBase 通过这个_dataBase进行对数据库的管理操作
4. 初始化方法
数据库操作:
1. 创建数据库并打开数据库
2. 在数据库里创建表
3. 在表里增加数据
4. 在表里删除数据
5. 在表里修改(更新)数据
6. 在表里查询数据
7. 关闭数据库
第一步和第二步必须在前面,第七步必须在后面 其他增删改查操作(第三步到第六步)根据具体实际情况而定
例如:
创建(拼接)数据库的指定路径 注意扩展名格式rbd
NSString *path = [NSString stringWithFormat:@"%@/Documents/myDatabase.rbd",NSHomeDirectory()];
NSLog(@"%@",path);
创建数据库对象
通过数据库指定路径创建数据库对象(数据库管理者对象)
_dataBase = [[FMDatabase alloc] initWithPath:path];
打开数据库,返回布尔类型
BOOL ret = [_dataBase open];
if (ret) {
NSLog(@"数据库创建并打开成功");
}else {
NSLog(@"数据库创建并打开失败");
}
5. 创建表注意:
CREATE : 创建create
TABLE : 表table
StudentInfo : 要创建的表名(表明根据实际情况自定义)
表名后面是一对小括号
小括号里面是各个参数(字段)列表
参数列表 每个参数用逗号隔开
参数左边是参数名 右边是类型
记住类型不要写错
第二个参数 name 类型是字符varchar 大小占32个字符
IF NOT EXISTS 如果我们想在创建表的时候 加上这个IF NOT EXISTS 修饰,如果数据库中没有表 就会创建表,如果有表就会直接去使用已存在的表,开发中经常写上,不管数据库中有没有要创建的表,习惯性的都加上,如果不加,第二次运行的时候就会创建表失败
PRIMARY KEY :主键,主键的目的保证表中某个字段在表里的数据是惟一的,防止有冲突
一般情况下一个表中至少一个主键
只需要在类型后面加上空格然后PRIMARY KEY即可,这样修饰的字段就保证数据的唯一性
例如:
NSString *createTableSqlite = @"CREATE TABLE IF NOT EXISTS StudentInfo(studentId INTEGER PRIMARY KEY,name varchar(32),password varchar(32),score INTEGER)";
这个方法执行excuteUpdata 可以增删改创操作 通过这个方法执行字符串保存的sql语句,返回类型为BOOL 如果为真代表创建成功 否则创建失败
BOOL ret = [_dataBase executeUpdate:createTableSqlite];
if (ret) {
NSLog(@"创建表成功");
}else {
NSLog(@"创建表失败");
}
/*
注意:一定保证sql语句的正确性,否则任何操作都会失败
*/
6. 增加信息
/*
增加的sql 语句
INSERT: 增加插入的意思 insert
INTO: 到或进入 into
StudentInfo: 表名(注意:表名必须在数据库中有,否则插入失败)
表名后面是小括号,小括号里面是字段列表,字段列表用逗号隔开,不需要字段类型
第一个小括号后有空格 空格之后是values(值的复数), 第二个小括号里面分别对应第一个小括号里面的字段,里面都是问号 问号用逗号隔开
总结:INSERT INTO 表名(字段列表)values(问号列表)
字段列表和问号列表要一一对应一致
补充:第一个小括号里面不一定全部写上表中的所有字段,根据实际情况而定
注意:有些字段是必须要写的字段,这时候第一个小括号里面必须有这个字段的名字,如果没有,插入的时候会报错
如果我们想要把表中所有字段都加上值, 可以把第一个小括号全部省掉(不太推荐)
*/
例如:
NSString *insertAql = @"INSERT INTO StudentInfo(studentId,name,password,score) values(?,?,?,?)";
注意:这个方法的参数是一个字符串列表,第一个参数是插入sql语句的字符串,以下参数是要插入的字段值(这里是4个值studengId,name,password,score)
BOOL ret = [_dataBase executeUpdate:insertAql,[NSString stringWithFormat:@"%lu",studengId],name,password,[NSString stringWithFormat:@"%lu",score]];
if (ret) {
NSLog(@"插入成功");
}else {
NSLog(@"插入失败");
}
7. 删除信息
/*
删除sql语句
DELETE:删除 delete
FROM: 从from 意思就是从哪个表中去删除
StudentInfo:表名(注意:删除的时候保证数据库中有这个表,否则删除失败)
WHERE: 代表删除条件
name表中的字段(保证字段在表中有,否则删除也会失败)后面是等号,等号后面是问号,代表删除哪个学生,如果表中没有此学生的名字,删除的时候会成功,但是做了无用功
总结:DELETE FROM 表名 WHERE 条件,条件开发中习惯性加上
*/
例如:
NSString *deleteSql = @"DELETE FROM StudentInfo WHERE name = ?";
如果这样写会删除StudentInfo表中所有的数据(慎用)不推荐
NSString *deleteSql = @"DELETE FROM StudentInfo";
执行删除sql语句,第一个参数删除sql语句,第二个参数name
BOOL ret = [_dataBase executeUpdate:deleteSql,name];
if (ret) {
NSLog(@"删除成功");
}else {
NSLog(@"删除失败");
}
8. 修改信息
/*
update更新的sql语句
UPDATE: 更新update
StudengInfo:表名 保证数据库中有此表 否则执行更新失败
SET:设置 设置后面是要修改字段 等号左边是表中的字段名 右边是值
WHERE:条件 根据名字name去找哪个学生,这里和删除sql语句一样的
如果name没有(没有这个学生),执行修改操作也是做了无用功
总结:UPDATE 表名 SET 需要更新的字段 WHERE 条件
*/
例如:
NSString *updateSql = @"UPDATE StudentInfo SET password = ?,score = 100 WHERE name = ?";
更新的时候习惯性的加上where条件,如果不加会将所有数据的密码和分数全部修改(慎用)不推荐
NSString *updateSql = @"UPDATE StudentInfo SET password = ?,score = 100";
执行更新sql 语句 第一个更新sql语句,第二个password密码 第三个条件中的name
BOOL ret = [_dataBase executeUpdate:updateSql,password,name];
if (ret) {
NSLog(@"更新成功");
}else {
NSLog(@"更新失败");
}
9. 查数据库中表中的数据
查询的sql语句
SELECT :选择(查找)select
* :代表查询表中所有数据
FROM :从(from)哪个表中查
StudentInfo :表名 注意:保证数据库中有此表,否则查询结果为空
总结:SELECT * FROM 表名
例如: NSString *selectSql = @"SELECT * FROM StudentInfo";
//查询语句sql也可以加WHERE条件 查询语句也是经常和WHERE条件配合使用
//NSString *selectSql = @"SELECT * FROM StudentInfo WHERE score > 70";
//查询名字是李成 并且分数是100 的学生 这里是AND
//NSString *selectSql = @"SELECT * FROM StudentInfo WHERE score = 100 AND name = '李成'";
//查询名字是李成 或者分数是100 的学生 这里是OR name是字符串 等号右边是‘值’ 注意:整型不需要加单引号
//NSString *selectSql = @"SELECT * FROM StudentInfo WHERE score = 100 OR name = '李成'";
//开发过程中根据实际情况而定,取出的数据SELECT和FROM之间 可以任意写想要查的字段(了解)
//NSString *selectSql = @"SELECT name,password FROM StudentInfo WHERE score = 100 OR name = '李成'";
FMResultSet 是一个集合类,查询结果的集合
FMResultSet *set = [_dataBase executeQuery:selectSql];
这里需要定义模型,用于存放从数据库中取出来的字段值
创建可变数组,用于存放模型
NSMutableArray *_dataArray = [NSMutableArray array];
while 循环 先判断set有没有值 有值执行循环 然后光标指向下一个set,set如果为空(nil),就结束循环
while ([set next]) {
创建模型
MyModel *model = [[MyModel alloc] initWithReultSet:set];
将模型加入到数组
[_dataArray addObject:model];
}
10. 关闭数据库
当所有操作结束之后 别忘记关闭数据库!!不关闭会占用内存或如果其它地方进行对数据库操作可能会出现没有任何效果
[_dataBase close];