今天我们要学习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数据持久化的更多相关文章

  1. iOS 数据持久化(扩展知识:模糊背景效果和密码保护功能)

    本篇随笔除了介绍 iOS 数据持久化知识之外,还贯穿了以下内容: (1)自定义 TableView,结合 block 从 ViewController 中分离出 View,轻 ViewControll ...

  2. iOS开发笔记-swift实现iOS数据持久化之归档NSKeyedArchiver

    IOS数据持久化的方式分为三种: 属性列表 (plist.NSUserDefaults) 归档 (NSKeyedArchiver) 数据库 (SQLite.Core Data.第三方类库等 归档(又名 ...

  3. IOS数据持久化之归档NSKeyedArchiver

    IOS数据持久化的方式分为三种: 属性列表 (自定义的Property List .NSUserDefaults) 归档 (NSKeyedArchiver) 数据库 (SQLite.Core Data ...

  4. iOS -数据持久化方式-以真实项目讲解

    前面已经讲解了SQLite,FMDB以及CoreData的基本操作和代码讲解(CoreData也在不断学习中,上篇博客也会不断更新中).本篇我们将讲述在实际开发中,所使用的iOS数据持久化的方式以及怎 ...

  5. iOS数据持久化方式及class_copyIvarList与class_copyPropertyList的区别

    iOS数据持久化方式:plist文件(属性列表)preference(偏好设置)NSKeyedArchiver(归档)SQLite3CoreData沙盒:iOS程序默认情况下只能访问自己的程序目录,这 ...

  6. iOS数据持久化-OC

    沙盒详解 1.IOS沙盒机制 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文 ...

  7. iOS数据持久化

    在iOS中,实现数据持久化一般分为4大种: 1.属性列表 2.对象归档 3.SQLite 4.Core Data 一.属性列表 NSUserDefaults类的使用和NSKeyedArchiver有很 ...

  8. iOS数据持久化存储:归档

    在平时的iOS开发中,我们经常用到的数据持久化存储方式大概主要有:NSUserDefaults(plist),文件,数据库,归档..前三种比较经常用到,第四种归档我个人感觉用的还是比较少的,恰恰因为用 ...

  9. 转载 -- iOS数据持久化存储

    作者:@翁呀伟呀 授权本站转载 概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方 ...

随机推荐

  1. FIM2010同步用户

    在需要进行同步的来源MA进行同步 在需要进行导入的来源进行导入

  2. android 浅谈Aidl 通讯机制

    服务端: 首先是编写一个aidl文件,注意AIDL只支持方法,不能定义静态成员,并且方法也不能有类似public等的修饰符:AIDL运行方法有任何类型的参数和返回值,在java的类型中,以下的类型使用 ...

  3. 【代码笔记】iOS-点击一个按钮会出现多个按钮的动画效果

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...

  4. 自定义Cell的方法

    Cell属于UITableView中的组件,有多种定义方式,有系统自带的方法,有自定义的方法. 可以使用系统的方法setSeparatorColor(设置分割线颜色) 设置setSeparatorSt ...

  5. Zend Studio 12 安装及破解

    安装: 1.下载最新版本Zend Studio:http://downloads.zend.com/studio-eclipse/12.0.0/ZendStudio-12.0.0-win32.win3 ...

  6. 安卓开发第一步:Android Studio安装配置

    虽然本人是JAVA开发工程师平时主要开发Web App,但因为项目需求需要开发对应的移动端.一时又找不到合适的安卓开发人员,兄弟我只好被项目经理"抓来当壮丁了".俗话说好" ...

  7. yii2 输出xml格式数据

    作者:白狼 出处:http://www.manks.top/yii2_xml_response.html.html本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文 ...

  8. SSH加载顺序问题

    http://bbs.csdn.net/topics/390299835 个人总结 1.项目启动首先加载WEB.xml文件 wen.xml文件中有     <!-- tomcat默认生成的地方是 ...

  9. Oracle脚本笔记

    //创建一个表create table  表名(字段名1 varchar2(20) not null);//多个用 , 隔开//添加字段alter table 表名add (字段名2 varchar2 ...

  10. [Java]Hessian客户端和服务端代码例子

    简要说明:这是一个比较简单的hessian客户端和服务端,主要实现从客户端发送指定的数据量到服务端,然后服务端在将接收到的数据原封不动返回到客户端.设计该hessian客户端和服务端的初衷是为了做一个 ...