第七课——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种方 ...
随机推荐
- 之三:CAAnimationGroup - 动画组
动画组顾名思义就是将多个不同的动画效果组合起来同时作用于一个层上 代码演示: // 创建基本路径 CGMutablePathRef path = CGPathCreateMutable(); // 设 ...
- umeng 渠道统计ios
1. 使用前提:需要在工程中添加依赖框架:AdSupport.framework 和 Security.framework 2.在AppDelegate.m文件中的-(BOOL)application ...
- 获取在线APP的素材图片
1.打开iTunes,搜索并下载APP 2.打开下载的APP的路径 4.对ipa包进行解压 5.找到app,右键"显示包内容"进行查看 6.结果
- Android 视频播放器 VideoView 的使用,播放本地视频 和 网络 视频
1.布局文件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:and ...
- 解决Android studio 非法字符的问题
前言:今天遇到一个问题,从一个项目中把一些类拷贝到Android studio 里面,运行的时候,报错. 显示刚才拷贝的类中有非法字符,我又检查了一遍,发现类中没有非法字符. 在网上查到了,相关的解决 ...
- IOS 四舍五入 进一法 去尾法
float numberToRound; int result; numberToRound = 4.51; result = (int)roundf(numberToRound); NSLog(@& ...
- Java核心:类加载和JVM内存的分配
类的加载: 指的是将class文件的二进制数据读入到运行时数据区(JVM在内存中划分的) 中,并在方法区内创建一个class对象. 类加载器: 负责加载编译后的class文件(字节码文件)到JVM(J ...
- Linux- Nginx简单的负载均衡(一)
这里先进行简单的nginx负载,安装nginx这里就不多说了,我们情景假设在已经安装好了nginx上: 1)查询nginx中的upstrea负载均衡模块 默认是有安装的.进入nginx源码目录中 . ...
- 按要求编写Java应用程序。 (1)创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)、减速(车速自减)、修改车牌号,查询车的载重量。 编写两个构造方法:一个没有形参,在方法中将车牌号设置“XX1234”,速 度设置为100,载重量设置为100;另一个能为对象的所有属性赋值; (2)创建主类: 在主类中创建两个机动车对象。 创建第
package com.hanqi.test; public class jidongche { private String chepaihao;//车牌号 private int speed;// ...
- PHP MSSQL 分页实例(刷新)
<?php/* '页面说明:*/ $link=mssql_connect("MYSQL2005","sa","123456") or ...