不得不说,这个系列的视频录制的一点都不友善,我尝试看了好多次,也没有看明白,模模糊糊的感觉一点也不好。不知道是老师的问题还是课程设置的问题。总是不知所以然的状态,我看到这里的时候都差点要放弃学习iOS开发了,还好,放弃一个周之后又重新拾起来了。不过我用其他学校的数据存储视频代替了麦子学院数据存储视频了。没办法,麦子学院的数据存储有点不适合我。。
A.七种方式��实现数据存储
在IOS中,数据存储的方式有以下七个方法:
1.NSUerDefaults
2. Setting Bundle
3.通用文件存储
4.对象归档
5.SQLite
6.Core Data
7.iCloud
B.五种数据存储的基本操作
数据存储的基本操作,也就说不管你使用什么方法,这个方法都需要能满足下面这5个基本操作:
1.保存
2.更新
3.删除
4.加载
5.查询
C.应用程序沙盒
1.了解应用程序沙盒。
开始学习数据存储方式之前,先需要了解应用程序沙盒。
因为IOS对数据存储有一定的要求,而且会进行权限检测,APP只能在应用程序沙盒中读取文件,这要求我们在编程时,需要的文件都要保存在沙盒内部。
2.应用程序沙盒里有四个文件:
1)MyApp.app: 存放App Bundle和APP的可执行代码。
2)Documents:存放重要的用户文档和应用数据文件。注意:A-1 NSUerDefaults中的首选项数据不在其中
3)Library:存放系统文件。
4)tmp:临时的数据。不要存放重要的文件。
3.学习通过iphone模拟器的目录来了解APP的C-2应用程序沙盒的四个目录。
4.学习通过代码来获取文件目录。
1)C语言的方法
var path = NSSearchPathForDirectoriesInDomains ( NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true ) //注意:这里最后写true表示显示完整路径,false只显示最后一个文件夹的名字
var documentsDirectory =path[0] as String //注意:path[0]零表示的是D-2-2) 中的Documents
printlin(documentsDirectory)
2)专门给IOS准备的方法
var fileManager = NSFileManager.defaultManager()
var documentDirectorWithManager = fileManager.URLsForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask)
println(documentDirectorWithManager)
D.NSUserDefaults
数据存储的第一种方法,即A-1。NSUserDefaults往往用在设置中(当然,还需要和A-2组合使用才能实现),当我们开发的APP需要开发系统设置这个功能时,可以采用这种存储方式。
是单例,整个程序中只有一个实例对象。
适合存储轻量级的数据。
可以存储的类型有限:
NSData
NSString(String)
NSNumber(Int,Double,Float)
NSDate(Array)
NSDictionary(Dictionary)
Bool
也是因为这些特性,决定了NSUserDefaults的使用场景。
关键命令:
var userDefaults = NSUserDefaults.standardUserDefaults()
var text = dataInputTextField.text
userDefaults.setObject(text, forKey: "text1”) 数据存入格式set多种可选择的格式。set作为前缀
userDefaults.synchronize() 存入数据生效
var textget = userDefaults.stringForKey("text1”) 读取以前存入的数据,可选择多种格式。ForKey作为后缀。
E.Setting Bundle
数据存储的第二种方法,即A-2。往往和A-1组合使用,完成APP的设置界面的功能开发。一般setting bundle和NSUserDefaults结合起来使用,才能完成设置这个功能的开发。这个设置是iPhone的设置按钮,不是APP内部的那个设置。
F.通用文件存储
通用文件存储可以用来存储序列化对象(serialized object)。序列化对象(serialized object)是指可以倍转换为字节以便于存储到文件中或者通过网络进行传输的对象。不过目前只能将某些对象放置到某些集合类中然后存储到通用文件中去,不是所有的对象都可以存储到通用文件当中去的。
可以进行对象序列化的类有:
· NSData
· NSString(String)
· NSNumber(Int, Double,Float)
· NSDate
· NSArray(Array)
· NSDictionary(Dictionary)
G.对象归档
对象归档(Archive):将对象转换成可以写入到文件中的格式,通常是以一种不可读的方式进行保存。
对象反归档(Unarchive):将数据从文件中读出并自动重建对象。
1.需要继承NSObject、NSCoding。同时需要写一下代码:
H.SQLite
I.Core Data
苹果公司提供的关系型数据库。
Entities实体。命名的时候首字母要大写,首字母之前不能有符合数字。
Attributes 属性
Relationships 关系:一对一 to one,一对多to many,多对一,多对多
Fetched Properties 提取属性(一般不常用)
control拖拽可以建立关系
J.iCloud
对此专题视频课程设置的疑问:
1.为什么要学习这两个个代码?有什么作用吗?在什么情况下会使用这个方法?如果告知原因,对理解掌握这个方法更有帮助的。
2.如果这两个代码的作用是通过代码来找到Documents文件夹,那么这个文件夹是应用程序沙盒中的Documents文件夹吗?
那应用程序沙盒中其他的三个文件夹(MyApp.app;Library,tmp)如何获取呢?为什么不讲呢?是因为不重要吗?
3.我尝试着把var documentsDirectory =path[0] as String 中的数字零改成其他数字,但是都说是超出数组范围了,那么这个数组只有零一个下标吗?