第七课——iOS数据持久化
今天我们要学习plist、Preference、NSKeyedArchiver、Sqlite、CoreData(属性列表、偏好设置、归档、数据库、模型化对象)。
首先plist就是将某些特定类,通过XML文件保存在目录中。程序都有自己的沙盒:主要会涉及到的文件夹有XXX.app(应用程序包)、Documents、Library/Caches、Library/Preferences、tmp。每个文件夹各自特性不同。
XXX.app存放程序所有的源文件,包括了资源文件(nib文件、其他资源)、可执行文件,虽然它在Finder中看起来就是一个普通文件,但实际上它是一个目录,它是程序的main bundle,所以可以通过Bundle类显示:print(Bundle.main.bundlepath)。
Documents用于存放重要数据,所以需要同步此文件夹的内容,一般就是数据库文件。通过FileManager显示(需要解包!):print(FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!)
Library/Caches用于存放体积大、不需要备份的非重要数据。通过FileManager显示(需要解包!):print(FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first!)
Library/Preferences用于存放程序的信息设置文件(一般不要存放其它类型的文件),所以同步时应该更新此文件夹的内容。
tmp存放一些临时文件,用完就删除。
对plist文件的操作:
let file = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
//自定义该文件
let fileName = file?.appendingPathComponent("test.plist")
let array = NSArray(objects: "131", "231", "312", "")
try! array.write(toFile: (fileName?.path)!, atomically: true)
//读取该文件
let result = NSArray(contentsOfFile: (fileName?.path)!)
print((fileName?.path)!)
print(result!)
此外,保存偏好设置(之前的Preference)和读取偏好设置:
let userDefaults = UserDefaults.standard
userDefaults.set("AAA", forKey: "str")
userDefaults.set(true, forKey: "sex")
userDefaults.set(21, forKey: "ages")
userDefaults.synchronize() //如果不同步,第二次及以后对文件的修改就不会被更新写入到文件
print(userDefaults.object(forKey: "str")!)
print(userDefaults.object(forKey: "sex")!)
print(userDefaults.object(forKey: "age")!)
Sqlite完整代码:
import UIKit
class ViewController: UIViewController {
var db: SQLiteDB!
@IBOutlet weak var no: UITextField!
@IBOutlet weak var name: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
db = SQLiteDB.sharedInstance
print(NSHomeDirectory()) //数据库保存位置:OC方式
//swift方式
let fileManager = FileManager.default
let path = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first
print(path)
}
@IBAction func Start(_ sender: UIButton) {
_ = db.execute(sql: "create table admin(no TEXT not null primary key, name TEXT)")
}
@IBAction func Add(_ sender: UIButton) {
_ = db.execute(sql: "insert into admin values('1','shutao')")
}
@IBAction func Login(_ sender: UIButton) {
let data = db.query(sql: "select * from admin")
if data.count > 0 {
let user = data[data.count - 1]
no.text = user["no"] as? String
name.text = user["name"] as? String
}
else {
let alertController = UIAlertController(title: "数据表为空", message: "请先添加学生,再查询", preferredStyle: .alert)
let cancelAction = UIAlertAction(title: "返回", style: .cancel, handler: nil)
alertController.addAction(cancelAction)
self.present(alertController, animated: true, completion: nil)
}
}
}

最新版本(可直接处理文本输入:将文本!):http://files.cnblogs.com/files/quanxi/das.zip
第七课——iOS数据持久化的更多相关文章
- iOS 数据持久化(扩展知识:模糊背景效果和密码保护功能)
本篇随笔除了介绍 iOS 数据持久化知识之外,还贯穿了以下内容: (1)自定义 TableView,结合 block 从 ViewController 中分离出 View,轻 ViewControll ...
- iOS开发笔记-swift实现iOS数据持久化之归档NSKeyedArchiver
IOS数据持久化的方式分为三种: 属性列表 (plist.NSUserDefaults) 归档 (NSKeyedArchiver) 数据库 (SQLite.Core Data.第三方类库等 归档(又名 ...
- IOS数据持久化之归档NSKeyedArchiver
IOS数据持久化的方式分为三种: 属性列表 (自定义的Property List .NSUserDefaults) 归档 (NSKeyedArchiver) 数据库 (SQLite.Core Data ...
- iOS -数据持久化方式-以真实项目讲解
前面已经讲解了SQLite,FMDB以及CoreData的基本操作和代码讲解(CoreData也在不断学习中,上篇博客也会不断更新中).本篇我们将讲述在实际开发中,所使用的iOS数据持久化的方式以及怎 ...
- iOS数据持久化方式及class_copyIvarList与class_copyPropertyList的区别
iOS数据持久化方式:plist文件(属性列表)preference(偏好设置)NSKeyedArchiver(归档)SQLite3CoreData沙盒:iOS程序默认情况下只能访问自己的程序目录,这 ...
- iOS数据持久化-OC
沙盒详解 1.IOS沙盒机制 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文 ...
- iOS数据持久化
在iOS中,实现数据持久化一般分为4大种: 1.属性列表 2.对象归档 3.SQLite 4.Core Data 一.属性列表 NSUserDefaults类的使用和NSKeyedArchiver有很 ...
- iOS数据持久化存储:归档
在平时的iOS开发中,我们经常用到的数据持久化存储方式大概主要有:NSUserDefaults(plist),文件,数据库,归档..前三种比较经常用到,第四种归档我个人感觉用的还是比较少的,恰恰因为用 ...
- 转载 -- iOS数据持久化存储
作者:@翁呀伟呀 授权本站转载 概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方 ...
随机推荐
- Android 开源框架Universal-Image-Loader完全解析(三)---源代码解读
转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/39057201),请尊重他人的辛勤劳动成果,谢谢! 本篇文章 ...
- [Android L]SEAndroid增强Androd安全性背景概要及带来的影响
1 SEAndroid背景 Android对于操作系统安全性方面的增强一直沿用Linux内核所提供的MAC强制访问控制套件SELinux,对权限进行了更为深度的管理,有效地控制着进程对资源的访问 ...
- iOS runtime的理解和应用
项目中经常会有一些的功能模块用到runtime,最近也在学习它.对于要不要阅读runtime的源码,我觉得仅仅是处理正常的开发,那真的没有必要,只要把常用的一些函数看下和原理理解下就可以了. 但是如果 ...
- 【代码笔记】iOS-两个滚动条,上下都能滑动
一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...
- 配置Kotlin环境(DataBinding)
1.安装Kotlin插件 在plugin中搜索kotlin,安装两个kotlin插件,重新启动Android Studio.2.build.gradle(project level) buildscr ...
- 用户故事地图(User Story Mapping)之初体验
北京这几日的天儿真是好的出奇,白天风和日丽,晚上繁星漫天:在这样一个周六的下午,小编参加了一次北京敏捷社区(微信号:Agile1001)组织的活动:<用户故事地图User Story Mappi ...
- Ajax最详细的参数解析和场景应用
4.1.定义和用法 AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. AJAX = 异步 J ...
- 关于学习javascript的一些建议
有被朋友或同事问到过,要如何学习前端技术,他们大多是已经掌握其他语言的程序员,或是计算机相关专业的在校生. 每次被问到,总要组织回忆一番,本着DRY原则,我还是根据我学习javascript(下文都简 ...
- Java开发人员最常犯的10个错误
这个列表总结了10个Java开发人员最常犯的错误. Array转ArrayList 当需要把Array转成ArrayList的时候,开发人员经常这样做: List<String> list ...
- IO流03--毕向东JAVA基础教程视频学习笔记
提要 16 读取转换流17 写入转换流18 流操作规律-119 流操作规律-220 改变标准输入输出设备21 异常的日志信息22 系统信息 16 读取转换流 字符流体系中的InputStreamRea ...