服务器一般返回的都是JSON、XML格式的数据?(文件下载除外)
因为这两种格式的数据是大家通用的,安卓、iOS等都能用。
JSON:轻量级。标准的JSON格式key必须使用“”双引号。
JSON格式:
{
"name":"xiaoming",
"age":12,
"qq":[
{ "dahao":"123123" },
{ "xiaohao":"456456" }
]
}
格式转换:
JSON OC
大括号{} NSDictionary
中括号[] NSArray
双引号"" NSString
数字1,2 NSNumber
数据解析方案:
苹果自带:NSJSONSerialization(性能最好)
第三方框架:JSONKit、SBJson、TouchJSON(性能左到右依次减低)
服务器数据->NSData(JSON数据)->OC对象(字典、数组等)->模型->使用数据
将数据写成plist文件:
字典的方法writeToFile:atomic:
视频播放:
导入框架MediaPlayer.h
创建视频播放器的两个类:
MPMoviePlayerController:继承自NSObject,不能直接显示,需要将它的view添加到另外控制器view上才能显示
MPMoviePlayerViewController:直接显示,播放。
[NSNull null]是单例对象。
总结:
JSON数据(NSData) -> OC对象(Foundation Object)
- {} -> NSDictionary @{}
- [] -> NSArray @[]
- "abc" -> NSString @"abc"
- 10 -> NSNumber @10
- 10.5 -> NSNumber @10.5
- true -> NSNumber @1
- false -> NSNumber @0
- null -> NSNull
JSON数据(NSData) -> OC对象(Foundation Object)
// 利用NSJSONSerialization类
+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;
- NSJSONReadingOptions
- NSJSONReadingMutableContainers = (1UL << 0)
- 创建出来的数组和字典就是可变
- NSJSONReadingMutableLeaves = (1UL << 1)
- 数组或者字典里面的字符串是可变的
- NSJSONReadingAllowFragments
- 允许解析出来的对象不是字典或者数组,比如直接是字符串或者NSNumber
OC对象(Foundation Object)-> JSON数据(NSData)
// 利用NSJSONSerialization类
+ (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;
格式化服务器返回的JSON数据
- 在线格式化:http://tool.oschina.net/codeformat/json
- 将服务器返回的字典或者数组写成plist文件writeToFile:atomic:
利用苹果官方API播放视频
// 创建视频播放器
MPMoviePlayerViewController *vc = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:urlStr]];
// 显示视频
[self presentViewController:vc animated:YES completion:nil];
字典转模型框架
1、 Mantle
所有模型都必须继承自MTModel
2、 JSONModel
所有模型都必须继承自JSONModel
3、 MJExtension
不需要强制继承任何其他类
设计框架需要考虑的问题
1、 侵入性
侵入性大就意味着很难离开这个框架
2 、 易用性
比如少量代码实现N多功能
3、 扩展性
很容易给这个框架增加新框架
网友评论