swift 数据存储
1.plist 存储
1.利用沙盒根目录拼接“Documents”字符串
//存储
func saveArray()
{
// 1.获得沙盒根路径,不管是真机还是模拟机,用它是最合适不过了
let home:NSString =NSHomeDirectory()
print(home)
// 2.document路径
let docPath:NSString = home.stringByAppendingPathComponent("Documents")
// 3.新建数据
let data:NSArray = ["jack","ffff"]
//3.文件路径
let filepath:NSString = docPath.stringByAppendingPathComponent("data.plist")
//4.存储数据
data.writeToFile(filepathasString, atomically:true)
}
//读取
@IBActionfunc read() {
//1.获得沙盒根路径
let home:NSString =NSHomeDirectory()
//2.document路径
let doctPath:NSString = home.stringByAppendingPathComponent("Document")
//3.文件路径
let filepath:NSString = doctPath.stringByAppendingPathComponent("data.plist")
//4.读取数据
let data:NSArray? =NSArray(contentsOfFile: filepathasString)
print("%@",data)
}
// 不建议采用,因为新版本的操作系统可能会修改目录名
2.利用NSSearchPathForDirectoriesInDomains获取路径
let array:
NSArray = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory,NSSearchPathDomainMask.UserDomainMask,false)
//2.document路径
let documents:NSString = array.objectAtIndex(0)as!NSString
print(documents)
2.偏好设置
//存储
@IBActionfunc save()
{
// 1.利用NSUserDefaults,就能直接访问软件的偏好设置(Library/Preferences)
let defaults:NSUserDefaults =
NSUserDefaults.standardUserDefaults()
print(NSHomeDirectory())//能看到手机根目录
// 2.存储数据
defaults.setObject("mj", forKey:"account")
defaults.setObject("123", forKey:"pwd")
defaults.setInteger(10, forKey:"age")
defaults.setBool(true, forKey:"auto_login")
// 3.立刻同步
defaults.synchronize()
}
//读取
@IBActionfunc read()
{
let defaults:NSUserDefaults =
NSUserDefaults.standardUserDefaults()
let account = defaults.objectForKey("account")
let autoLogin:Bool = defaults.boolForKey("auto_login")
print("%@ -- %d", account, autoLogin)
}
- 注意:UserDefaults设置数据时,不是立即写入,而是根据时间戳定时地把缓存中的数据写入本地磁盘。所以调用了set方法之后数据有可能还没有写入磁盘应用程序就终止了。出现以上问题,可以通过调用synchornize方法强制写入[defaults
synchornize];
3.NSKeyedArchiver归档(NSCoding)
class MJStudent:
NSObject,NSCoding
{
var no:
NSString!
var height:
Double!
var age:
Int32!
/**
* 将某个对象写入文件时会调用
* 在这个方法中说清楚哪些属性需要存储
*/
func encodeWithCoder(aCoder:
NSCoder)
{
print(NSHomeDirectory())
aCoder.encodeObject(self.no, forKey:
"no")
aCoder.encodeInt(self.age, forKey:
"age")
aCoder.encodeDouble(self.height, forKey:
"height")
}
/**
* 从文件中解析对象时会调用
* 在这个方法中说清楚哪些属性需要存储
*/
required
init?(coder aDecoder:
NSCoder)
{
self.no = aDecoder.decodeObjectForKey("no")
as! String
self.age = aDecoder.decodeIntForKey("age")
self.height = aDecoder.decodeDoubleForKey("height")
}
}
class ViewController:
UIViewController {
//存储
@IBAction
func save()
{
//1.新的模型对象
let stu:
MJStudent = MJStudent(coder: aDecoder: NSCoder)
stu.no =
"42343254"
stu.age =
stu.height =
1.55
// 2.归档模型对象
// 2.1.获得Documents的全路径
var doc:
NSString = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory,
NSSearchPathDomainMask.UserDomainMask,
true).last
// 2.2.获得文件的全路径
var path:
NSString = doc.stringByAppendingPathComponent("stu.data")
// 2.3.将对象归档
NSKeyedArchiver.archiveRootObject(stu, toFile: path
as String)
}
//读取
@IBAction
func read()
{
// 1.获得Documents的全路径
var doc:
NSString = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory,
NSSearchPathDomainMask.UserDomainMask,
true).last!
// 2.获得文件的全路径
var path:
NSString = doc.stringByAppendingPathComponent("stu.data")
// 3.从文件中读取MJStudent对象
let stu:
MJStudent = NSKeyedUnarchiver.unarchiveObjectWithFile(path)
print("%@ %d %f", stu.no, stu.age,
stu.height)
}
}
swift 数据存储的更多相关文章
- IOS(swift)-数据存储 · 用NSUserDefaults存储配置信息
1.用NSUserDefaults存储配置信息 注:本次使用NSUserDefaults存储信息是在不考虑安全问题的前提下.分两种情况:1.如果是密码用户名等敏感信息,请使用Keychain存储用户敏 ...
- iOS - Swift NSUserDefaults 数据存储
前言 public class NSUserDefaults : NSObject 用来保存应用程序设置和属性.用户保存的数据.用户再次打开程序或开机后这些数据仍然存在.如果往 userDefault ...
- Swift之沙盒与数据存储
应用沙盒结构分析 1.应用程序包:包含了所有的资源文件和可执行文件 2.Documents:保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录 3.tmp:保存应用运行时所需要的 ...
- 最全的iOS数据存储方法
目的 项目准备运用的Core Data进行本地数据存储,本来打算只写一下Core Data的,不过既然说到了数据存储,干脆来个数据存储基础大总结!本文将对以下几个模块进行叙述. 沙盒 Plist Pr ...
- swift对象存储
swift对象存储 简介 OpenStack Object Storage(Swift)是OpenStack开源云计算项目的子项目之一,被称为对象存储,提供了强大的扩展性.冗余和持久性.对象存储,用于 ...
- swift对象存储安装
对象存储服务概览 OpenStack对象存储是一个多租户的对象存储系统,它支持大规模扩展,可以以低成本来管理大型的非结构化数据,通过RESTful HTTP 应用程序接口. 它包含下列组件: 代理服务 ...
- 16_Android的数据存储_ SharedPreference、XML和JSON
1. Android读写首选项 1.1 SharedPreferences SharedPreferences 是一种轻型的数据存储方式,它的本质是基于XML文件存储Key-Value键值对数据,通常 ...
- Kooboo CMS技术文档之三:切换数据存储方式
切换数据存储方式包括以下几种: 将文本内容存储在SqlServer.MySQL.MongoDB等数据库中 将站点配置信息存储在数据库中 将后台用户信息存储在数据库中 将会员信息存储在数据库中 将图片. ...
- Android之数据存储的五种方法
1.Android数据存储的五种方法 (1)SharedPreferences数据存储 详情介绍:http://www.cnblogs.com/zhangmiao14/p/6201900.html 优 ...
随机推荐
- ORA-00922: 选项缺失或无效
1.错误描写叙述 SQL> create table info_stu from select t.stu_id,t.stu_name,t.stu_age from info t; create ...
- 具体解释Hibernate中的二级缓存
1.前言 这篇博客再前几篇博客的基础上来解说一下.Hibernate中的二级缓存.二级缓存是属于SessionFactory级别的缓存机制. 第一级别的缓存是Session级别的缓存,是属于事务范围的 ...
- hdu 1171 Big Event in HDU(01背包)
代码: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; in ...
- 52. nodejs报错:Cannot find module 'ejs'
转自:https://blog.csdn.net/u010142437/article/details/79012605 错误显示: Error: Cannot find module 'ejs' ...
- Kinect 开发 —— 保持视频影像
相比直接将影像显示出来,如果能将录制到的影像保存到硬盘上就好了.但是,影像录制,是需要一定的技巧,在网上可以看到很多例子演示如何将Kinect获取到的影像以图片的形式保存到本地,前面的博文也介绍了这一 ...
- 2017国家集训队作业[arc082d]Sandglass
2017国家集训队作业[arc082d]Sandglass 题意: 有一个沙漏,初始时\(A\)瓶在上方,两个瓶子的最大容量都为\(X\)克,沙子流动的速度为\(1g\)每单位时间.给出\(K\) ...
- BZOJ4652: [Noi2016]循环之美(莫比乌斯反演,杜教筛)
Description 牛牛是一个热爱算法设计的高中生.在他设计的算法中,常常会使用带小数的数进行计算.牛牛认为,如果在 k 进制下,一个数的小数部分是纯循环的,那么它就是美的.现在,牛牛想知道:对 ...
- 【DRF认证】
目录 认证组件的详细用法 本文详细讲述了DRF认证组件的原理以及用法. @ * 源码剖析** 上一篇博客讲解DRF版本的时候我们都知道了,在dispatch方法里执行了initial方法来初始化我们的 ...
- PHP和JSON
PHP和JSON 一.总结 1.php中json的使用方法:php中json的使用超级简单啦,主要是两个函数json_encode(编码)和json_decode(解码),像md5加密 2.json的 ...
- 6.Windows 二进制文件 (.exe)安装--终端安装
转自:http://www.runoob.com/nodejs/nodejs-tutorial.html 32 位安装包下载地址 : http://nodejs.org/dist/v0.10.26/n ...