网络编程归纳总结三阶段
解析plist文件
类: NSPropertyListSerialization
有一个解析数据的类方法 :propertyListWithData
字典转模型时 如果字典中的键值对多于模型的属性个数 就会报错 这时 需要重写
- (void)setValue:(id)value forUndefinedKey:(NSString *)key {
}方法
解析时间
记录时间的类:
NSCakendar
//把数字的日期,转换成日期对象
NSDate *date = [NSDate dateWithTimeIntervalSince1970:self.addtime.intValue];
NSCalendar *calendar = [NSCalendar currentCalendar];
//两个日期相减,获取指定的日期部分
NSDateComponents *components = [calendar components:NSCalendarUnitMinute fromDate:date toDate:[NSDate date] options:0];
if (components.minute < 60) {
return [NSString stringWithFormat:@"%zd分钟以前",components.minute];
}
//获取小时
components = [calendar components:NSCalendarUnitHour fromDate:date toDate:[NSDate date] options:0];
if (components.hour < 24) {
return [NSString stringWithFormat:@"%zd小时以前",components.hour];
}
//获取日期
NSDateFormatter *ndf = [[NSDateFormatter alloc] init];
// ndf.dateFormat = @"yyyy-MM-dd HH:mm:ss";
ndf.dateFormat = @"MM-dd HH:mm";
return [ndf stringFromDate:date];
XML
XML (扩展式标记语言)
作用是存储和传输数据
HTML (超文本传输语言) 作用是显示数据
是以前最常用的传输文件格式
是由标记组成的 有且只能有一个根节点 节点中可以任意嵌套
XML的解析
两种方式:
SAX : iOS中的解析方式 内存占用小 只读
DOM: mac上的解析方式 iOS无法使用 需要第三方框架 内存占用大 可以读写
SAX步骤:
//解析数据
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
//设置代理
parser.delegate = self;
//开始执行代理的方法,代理的方法中开始解析的
[parser parse];
//需要设置代理
//代理方法执行 和 设置代理属性在同一个线程
//代理的方法
//1 开始解析文档
- (void)parserDidStartDocument:(NSXMLParser *)parser {
NSLog(@"1 开始解析文档 %@",[NSThread currentThread]);
}
//2 找开始节点
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict {
//elementName 节点的名称
//attributeDict 标签的属性
NSLog(@"2 找开始节点 %@--%@",elementName,attributeDict);
}
//3 找节点之间的内容
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
//
NSLog(@"3 找节点之间的内容 %@",string);
}
//4 找结束节点
- (void)parser:(NSXMLParser *)parser :(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
//elementName 节点名称
NSLog(@"4 找结束节点 %@",elementName);
}
//5 结束解析文档
- (void)parserDidEndDocument:(NSXMLParser *)parser {
NSLog(@"5 结束解析文档");
}
//6 解析出错
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
NSLog(@"出错");
}
DOM解析步骤:
//解析数据
//DOM 文档对象模型
//1 加载xml文档
GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data error:NULL];
//获取xml文档的根元素(标签)
GDataXMLElement *rootElement = document.rootElement;
// NSLog(@"%@",rootElement);
NSMutableArray *mArray = [NSMutableArray arrayWithCapacity:10];
//2 遍历所有的video节点 h]
for (GDataXMLElement *element in rootElement.children) {
//创建对象
Video *v = [[Video alloc] init];
[mArray addObject:v];
//给对象的属性赋值
//3 遍历video的子标签
for (GDataXMLElement *subElement in element.children) {
//给属性赋值
[v setValue:subElement.stringValue forKey:subElement.name];
}
//4 遍历video的所有属性
// NSLog(@"%@",element.attributes);
for (GDataXMLNode *attr in element.attributes) {
[v setValue:attr.stringValue forKey:attr.name];
}
最近才开始往github上放东西 在公司写的又不能放= = 大家姑且看看吧
github地址: https://github.com/FuThD