一、ipad编程
乐吧项目练习:
1.最少实现其中的两个界面
要求:
1..使用MVC设计模式
2.自拟两个界面,其中有乐吧(页 必选)
3.每一个界面都有自己的一套MVC
4.实现两个界面功能的算及格
ipad编程中得两个控件(特有的)
1.1 拆分视图由一个 UITableView和一个UIViewController组合。
1.2 两部分
左侧的视图 用于显示列表内容 + 带导航控制器
1>以前学过的所有跟导航控制器相关的内容都可以用。
2>1.UITableView的编辑模式
2.1 Cell的多行选中状态
2.2 UITableView在导航 索引条 --->放大镜
搜索条--->输入某一个邮件 或 笔记的标题
3>UITableView高级
带有折叠效果的TableView
C语言程序设计
c_day01.txt
c_day02.txt
c_day03.txt
c_day04.txt
OC语言程序设计
oc_day01.txt
oc_day02.txt
UIKIT框架
ui_day01.txt
数据持久化
多线程
网络和网络请求
项目积累
4>右侧视图 UIViewController 展示视图
1>需要在左侧的 标示图中声明 展示视图的属性
2>使用拆分视图中的.viewControllers 这个属性,中的lastObject来创建这个 展示视图。
3>左侧TableView 的dataSource delegate方法3 + 1;
4>如果涉及到传值 灵活考虑(8种传值方式选一种)
2.弹出视图(iPhone不能使用,只能在iPad上用)
2.1 如果iPhone上想用 自定义控件
步骤: 第一步:要弹出的视图 UIViewController 实例化
第二步:设置弹出视图--->指定---->实例
第三步:设置弹出视图的大小(自拟)
第四步:设置代理
第五步:弹出视图---->传值(单例 属性 协议 Block等)
1.拆分视图UISplitViewController
使用步骤: 注意:创建的工程必须是iPad工程(iPad控件)
第一步:拖拽一个UISplitViewController
第二步:创建两个类
第一个类 类型UITableViewController 带导航
第二个类 类型UIViewController
第三步:设置UISplitViewController自动生成的 UITableViewCell 在属性检查器中指定唯一标示 "Cell"
第四步:在UITableViewController中声明一个 右侧展现视图的属性(Detail)
DetailViewController *dvc = [self.splitViewController.viewControllers lastObject];
第五步:实现UITableView的代理方法 3 + 1
第六步:传值 从UITableViewController ----->UIViewController展示出要展现的内容。
练习:使用拆分视图 实现 我的笔记的小项目,要求独立完成。左侧的列表视图显示出笔记的天数,
如
day01.txt
day02.txt
day03.txt
day04.txt
day05.txt -->右侧是展现视图 day05 循环
day06.txt 1.for循环
day07.txt 2.while循环
day08.txt 3.do...while循环
day09.txt ......
day10.txt
需求:1.能够点击左侧的列表 在右侧的视图中显示笔记的内容
2.在右侧视图中自定义一个View
View上 有字体放大 字体缩小 字体颜色按钮的设置
字体放大:可以放大字体(每次放大1个字号)
字体缩小:可以缩小字体(每次缩小1个字号)
3.使用UITextView显示 笔记的内容
3.1 要求使用 字符串的自适应高度
复习的是View层的知识 day02~day03
ios6/ios7 字符串自适应高
NSAttributedString 带属性的字符串 字体的大小 颜色
3.2 用于图文混排
UITableViewCell自适应高度
例如:朋友圈 是一个变高的Cell。
练习:UITabelView中 Cell高度根据 字符串的内容 自定适应高度,创建一个dataArray的数组,
@"你存在我深深的脑海里,我的梦里,我的心里,我的歌声里,你存在我深深的脑海里,我的梦里,我的心里,我的歌声里,你存在我深深的脑海里,我的梦里,我的心里,我的歌声里,你存在我深深的脑海里,我的梦里,我的心里,我的歌声里,",
@"iPhone6国行 预计10.10日上市,水货iPhone6吐血大甩卖!降价3000+";
@"祝大家都能8000+高薪就业!";
4.左侧的UITableView上的UINavigationItem 有Edit用于删
除编辑TableView 实现删除Cell。右侧添加一个Add,用
于添加Cell。
5.使用弹出视图 修改颜色。
2.弹出视图UIPopoverController
步骤:
1.第一步: 在Detail 视图中 声明一个弹出视图的属性
2.第二步: 创建一个弹出视图要弹出的内容
是一个视图控制器的类型
UIViewController 类 ------->0.0显示一部分。
3.第三步:设置弹出视图的大小 320 *1100
根据自己的需要定制弹出视图的大小
4.第四步:设置弹出视图的代理人(委托人)
5.第五步:弹出对话框
二、文件管理
2.1 文件管理器 NSFileManager(操作目录,操作文件)
对文件或目录 ,进行管理提供
1>文件的创建
2>判断指定路径上的文件是否存在//检测指定路径上是否存在某一个文件
3>文件的重命名
4>文件或目录的复制
5>文件或目录的移动
6>文件的删除等
7>拿到文件的属性(字典类型)
7.1 属性中一些重要key NSFileSize---->值
7.2 大小的单位(字节数) 65002400 字节
8>NSFileManager管理沙盒路径
2.2 NSFileManager对文件的管理
对文件的操作都是一种宏观上的操作,不能够对文件进行读写等细化的操作,如过多文件要求细化的操作需要使用
NSFileHandle文件柄,可以精确控制每次读取的内容的字节数。如:每次读500字节。
2.3 Mac OS X系统中:文件的大小 是以字节来区分。文件的单位是字节。
2.4 例:系统复制文件的过程。
3.1 如何创建一个文件管理器
3.2 用文件管理器 创建文件
3.3 用文件管理器 检测指定路径上是否存在某文件
3.4 用文件管理器 删除文件
3.5 用文件管理器 拿到文件的属性。
key:NSFileSize ----->value: xxxxx字节数
知道文件的属性是用字典来保存的。
注:文件管理器对文件的操作 不是精细化的操作,也就是时候不能读取指定的字节。
补充:如何拿目录
4.NSFileHandle 文件柄
4.1创建NSFileHandle的实例
1>读文件 [infile ...read...]
2>写文件 [tofile ...write...];
1>读数据 精确到字节 500字节
2>写数据 精确到字节 500字节
3>例子 模拟文件的拷贝过程(读一个大数据----->分块--->循环的读入到内存中----->创建文件的)
4.2 读文件/写文件
NSData/NSMutableData/ 数据缓冲区/二进制数据
1>读数据对应两个方法
1.1 readDataOfLength:指定长度
1.2 readDataToEndOfFile 一直读完
4.3 使用完毕以后
使用完毕以后 关闭文件 closeFile
例:Demo_拷贝文件
5.UITextView 文本视图
多行输入/多行显示文本内容/textKit实现图文混排。
注意的是 拖拽控件的时候,textView的frame应该在
最右侧让出一部分距离,直到能看到右侧的滚动条为
止。如果是手写代码 frame.size.w - (80~100)
6.属性字符串/绘制字符串/ios6 ios7
7.UITableView 中Cell高度的自适应。二、沙盒/沙箱
ios App每一个程序都一个沙盒,用来存储应用程序的配置,以及缓存数据等。
3.屏幕横屏或竖屏的检测
3.1 横屏状态的检测
3.2 竖屏状态的检测
3.3 补充点(播放视频的时候)
4.封装自己的三方库(高级)
4.1 封装自己关于 ScrollView
4.2 封装自己关于 TableView
4.3 封装自己关于 UIImageView----->SDWebImage
4.4 封装自己关于 数据库的管理类
4.5 封装自己关于 网络的管理 + 多线程 +Block
4.6 封装自己关于 Layout的布局类
5.沙盒(路径)以及沙盒的目录结构
5.1 模拟器的路径怎么拿到
5.2 真机下得路径怎么拿到
5.3 如何往沙盒路径中写入数据
5.4 如何从沙盒中的文件读取数据
5.5 分别拿到沙盒目录结构中的三个目录(子目录)
5.6 需要真机的设备
1.什么是沙盒
ios应用程序只能在为该应用创建文件的系统中读取文件,不能取其它的位置访问,这样的区域我们就成为是沙盒。
如:模拟器中的一个程序的沙盒位置。
程序中所有的非代码文件都保存在沙盒中,比如应用程序的图标,图片,声音,影像,属性列表 文本文件等。
2.如何找到沙盒的地址
2.1 在Finder资源管理器中---->按住option---->显示隐藏的资源库----->ApplicationSupport--->iPhone Simulator
---->7.1(4 4s 5 5c的应用)或7.1-64(5s 6 6+ 6s)--->Applications---> 2F491B99-45E9-4363-8A0F-C7C3FB678871(沙盒的位置)
2.2
3.沙盒目录结构
3.1 对应三个目录
Documents:Apple官方建议将程序中建立的或程序浏览的文件数据都保存在Documents 目录里,itunes备份数据时或恢复数据时,itunes备份或恢复包含该目录。
Library:主要存储的是默认的设置 或 其它的状态信息。
Preferences存储的是用户设置 xxx.plist文件 Caches存储缓存文件,itunes备份 不会备份该目录
tmp:提供的是一个存储临时文件的地方。iPhone一旦重启tmp目录下的内容就会被清空。
以及一个编译链接以后生成 xxxx.app 应用程序
二、模型层 ------->数据库
1.注意的是UIImageView 图片是不能直接写到MVC
Model层的,因为数据库不能直接存储图片类型的格式,
NSString存路径,NSData存入到数据库中。
2.Foundation类型(不能出现视图UIKIT框架中的控件)
3.工程目录 NSBundle
3.1>是什么
Bundle是一个目录,其中包含了 工程中使用的声音,图像,资源,以及编译好的代码 .nib文件等。
IOS系统提供了一个NSBundle的类进行管理。
3.2>怎么用
第一步:拿到工程路径
[[NSBundel mainBundle]pathForResource:@"资源的名称" ofType:@"类型"];
参数:资源的名称 Red.mp3
//开发中都是套写
[[NSBundel mainBundle]pathForResource:
@"Red.mp3" ofType:nil];
//教学上
[[NSBundel mainBundle]pathForResource:
@"girl" ofType:@"png"];
练习1:从工程中的一个bj.txt文件中读取数据,显示到UITextView上。
2.NSData 二进制数据(缓冲区)对象
2.1UIImage类型<----->数据库中
1> 字符串名称或路径
2> 图片转换成NSData存到数据库中
2.3 Foundation类型<----->NSData类型
字符串如何转化成NSData
2.4 bytes数组----->16位 网络字节序<------>NSData
3.Plist文件 属性列表文件
3.1 用来存储用户的设置以及配置文件
保存程序的一些基本配置内容 比如 工程的名称,比如 本地化国际化的语言等。
常常用来存储 游戏Cocos2d-x中的 瓦片地图/图片资源
3.2 在Objective -C中 plist可以存储Foundation中数据类型
NSString 字符串类型
NSArray 数组类型 ------>book.plist
NSDictionary 字典类型
保存程序 工程配置信息 存储我们的数据
Foundation框架中的四大类型的数据都可以直接写入到plist文件中。
plist文件中可以存数组 字典 字符串 Data等。
通常都用它存储配置文件,游戏中cocos2d-x 中用plist文件来存储游戏中的图片。
工程的配置:
1.工程的名称
2.屏幕可以旋转的样式
3.本地化和国际化的语言等
4 .plist文件的读取(MVC例子 以及Objective-c阶段关于plist文件的读写的例子)(理解)
4.NSUserDefaults 以及传值(了解)
5.XML格式文件的解析(掌握)
5.1 SAX
基于事件模型的XML解析的方式、
5.2 DOM
基于文档模型的XML解析的方式
5.3 文件格式的基本语法
<?xml version="1.0" encoding="utf-8" ?>
<root>
<books>
<book id="1"language="ch">
<name>乔布斯传</name>
<auther>
<name>沃尔特·艾萨克森</name>
</auther>
<price>80.00</price>
<summary>一本介绍乔布斯传奇一生的图书。</summary>
<public>电子工业出版社</public>
</book>
<book id="2" language="ch">
<name>呐喊</name>
<auther>
<name>鲁迅</name>
</auther>
<price>12.00</price>
<summary>揭示了中国的社会面貌,控诉了封建制度的罪恶,喊出了“五四”时期革命者的心声。它反映了“五四”彻底不妥协地反封建主义的革命精神,适应了中国革命从旧民主主义向新民主主义转变的需要,在中国现代文化史和文学史上占有重要地位!</summary>
<public>电子工业出版社</public>
<image>http://218.247.142.206/pic/01.png</image>
</book>
<book id="3" language="en">
<name>哈利波特</name>
<auther>
<name>JK罗琳</name>
</auther>
<price>365.00</price>
<summary>主人公哈利·波特在霍格沃茨魔法学校六年的学习生活和冒险故事。</summary>
<public>电子工业出版社</public>
//自己添加其他的字段进行解析
</book>
</books>
</root>
解析:
1.第一行 <?xml version="1.0" encoding="utf-8" ?> 表示XML格式的文件的版本和 编码格式UTF-8 默认的格式
2.<roo></root>根节点,在XML格式的文件中<root> ….. </root>
3.<books>是一个XML格式的元素,元素是可以嵌套,一个元素可以有多个子元素。往往就对应IOS中的一个数组
4.第四行<book id="1"language="ch"> 又是一个标签 id = "1"表示的属性,id属性的值是1,language = "ch"语言属性的值是中文>
<book id="1"language="ch">
<name>乔布斯传</name>
<auther>
<name>沃尔特·艾萨克森</name>
</auther>
<price>80.00</price>
<summary>一本介绍乔布斯传奇一生的图书。</summary>
<public>电子工业出版社</public>
</book>
继续<name>乔布斯传</name>,下一个标签<auther>沃尔特·艾萨克森</auther>,下一标签<price>80.0</price>,<summary>一本介绍乔布斯传奇一生的图书。</summary>,<public>出版社<public>,</book>
注意:如果在使用第三库的过程中反复出现问题,如果路径都对,导入的库也是正确的,此时 关闭ARC。
练习:解析Citys中的XML格式的城市的地址,并打印出来。
城市的名称,和城市的经、纬度
2.XML解析 图片(静态 和 动态)
图文混排 NSTextKit框架
UITextView/UIWebView
1.掌握沙盒路径
拿到我们应用程序的沙盒路径的方法,和拿到我们Mac OSX系统的主目录方法是一样的。
注意:模拟器下的沙盒路径和真机下的路径是不一样的。
2.沙盒陌路的组成
Doc
Lib
tmp
3.往沙盒中存储数据
4.Plist文件的读写
写入内容到Plist文件中
读取内容从Plist文件读
5.Foundation框架中的数据类型
4大类型支持直接把内容写到文件中
NSString 类型 及其 子类
NSArray 类型 子类 XML格式存储的数据
NSDictionary 类型 子类 XML格式存储的数据
NSData 直接写入到文件中
二、NSData 和 NSMutableData 可变数据对象
1.NSData 和 NSMutableData 数据对象
存储的是二进制数据,在文件操作,网络,以及核心图形图像中使用较广泛。
A> 字符串类型 和 数据对象的相互转换
1.NSString 类型 ------->NSData 类型
2.NSData 类型 ------>NSString类型
B>文件中的操作 NSFileHandle 和 NSData
C>UIImage 类型 和 NSData类型 的相互转换
1.数据库里存储图片
1>存储图片的名称或路径
car@2x.png, car@3x.png
http://218.247.142.206/images/car@2x.png;
2>如果图片是较小的
UIImage类型 ---->NSData类型 存数据库
D>NSMutableData 可变数据对象
1.缓冲区用
QQ音乐 ---->UI界面----->结构(数据的请求)
客户端----->服务器端----->请求 我的歌声里.mp3
songInfor:
歌曲的名称:我的歌声里
歌曲的作者:曲婉婷
专辑名称:《我的歌声里》
歌词地址:http://218.247.142.206/mp3/lrc/10000099.lrc
歌曲的大小:412860
歌曲的地址:https://api.music/mp3/加拿大/曲婉婷/我的歌声里/我的歌声里.mp3
开始请求数据:200kb
NSMutableData *data = [data addObject:obj];
E>NSArray类型 转 NSData类型
数组转NSData是建立在归档的基础上,归档也称为序列化,在OC中NSString 对象 NSNumber对象 NSArray对象
NSDictionary字典对象 NSData 数据对象 这些类要进行数据保存时可以通过NSKeyedArchive 类来实现。
Foundtaion框架提供的 归档和解归档的方式,也叫做序列化和反序列化的过程。
第一步:导入头文件 归档和接归档
#import <Foundation/NSKeyedArchiver.h>
第二步:要有数据源
NSString NSArray NSDictionary NSData 自定义类
NSDictionary *dict =@{@"key<黑猫警长>":@"value<眼睛大的像铜铃铛!>",@"key<葫芦娃>":@"value<葫芦娃,葫芦娃一棵藤上7朵花>",@"key<黄金圣斗士>":@"天马流星拳",@"key<舒克和贝塔>":@"value<舒克舒克开飞机的舒克>"};
NSArray *array = @[@"1",@"2",@"3",@"4",@"5"];
第三步:把字典或数组 用归档形式存到某一个文件中
NSString *home = NSHomeDirectory();---->a.txt
[NSKeyedArchiver archiveRootObject:array];
数组转NSData是通过归档来实现的。
NSArry---->NSKeyedArchiver--->NSData
NSData---->NSKeyedUnArchiver---->NSArray
F>归档文件存到Plist文件中
NSArray ---->NSDictionary---->array--->archiver--->plist文件里
G>从Plist文件中解归档文件
demo.plist--->unarchiver---->NSArray *arr---->NSDictionary *dict;
2.NSUserDefaults
1.NSUserDefaults是 ios系统提供的一个默认的app可以和系统进行交互的编程接口。
2.干什么用:NSUserDefaults用来进行对象的保存,恢复应用程序相关的偏好设置,配置数据等。
如:滚动视图 + NSUserDefaults 来做应用程序的引导换页。
使用NSUserDefaults进行 界面间的传值。
A界面 (类) ----> NSUserDefaults---->B界面(类)
3.原理是单例
3.1 能够存储那些类型的对象
NSString NSArray NSDictionary NSData NSNumber等,如果是自定义类型 把自定类 转成 NSData进行存储.
3.2 是单例,同时NSUserDefaults 也是线程安全的。
4. NSUserDefaults传值练习
四、异常
1.异常也叫异常处理,就是程序发生错误时的一种错误处理的机制。
2.有异常的好处就程序在发生错误时,不会直接闪退(立即退出),常常在读写文件 分配内存 读写数据库时我们使用异常处理。
如:读异常
//指定的路径上没有这个文件?
//不存在 ---->异常
//就创建文件,请求数据,写到文件中。
//访问数据库----->openfire
写异常
//往一个路径的文件写入数据(文件不存在)
//抛出异常--->捕获异常---->创建了一个文件-->写
。。。。
业务逻辑中出现的异常
a/b; b = 0;分母为零
异常了---->捕获--->处理异常---->写入日志
3.如何使用异常
@try
@catch
@throw
@finally