iOS开发iOS Developer - Persistent StorageiOS本地持久化

保存数据的基础知识

2015-11-16  本文已影响1358人  莫威權在B612等着那温柔的风

iOS Persistence and Core Data Lesson 1- Udacity的笔记

笔记目录:
1.保存数据的基础知识(所在章节)
2.如何使用NSCoder/NSKeyedArchiver保存数据
3.Core Data的使用
4.Core Data的构建
5.Core Data的框架
各文章的介绍:我的女朋友CoreData和她闺蜜们


前言

通过将数据缓存在本地,可以有效减少http请求数,和提升用户体验。

本文章要解决的问题:
要保存数据。
1.首先要知道什么时候保存恰当?
2.然后要知道怎么保存?即是用什么类(class)和方法(method)?

App Life Cycle

要了解iOS如何将数据存在本地,先来了解一个App的生命周期(App Life Cycle).

一个App的状态

或者你已经注意到了,App有两个表示正在运行的状态(state)

当然,除了表示正在运行的状态,也有表示不在远行的状态(state)

如下,第五的状态是很少见到的。

这些状态的转换都会作为app生命周期事件(app lifecycle event)传递给AppDelegate.

Life Cycle Method

状态转换是通过Delegate通知AppDelegated,其中管理状态转换(Managing State Transitions)的Delegate method,如下:
以下两个method是,Not Running 转 Active 状态

以下这method是任一 state 转为 Active状态

以下method如其名字所说

这method是转为Not running时

例子

将上面AppDelegate的method中加入相应print语句观察状态转换。

按照相应gif的操作,在终端有如下输出:


第一次启动时


startTheApp.gif

App Delegate: will finish launching
App Delegate: did finish launching
App Delegate: did become active


按下home键时


homeButton.gif

App Delegate: will resign active
App Delegate: did enter background


按下app按钮回到Foreground时


backToForeground.gif

App Delegate: will enter foreground
App Delegate: did become active


lock的时候


Lock.gif

App Delegate: will resign active
App Delegate: did enter background


解锁的时候


unLock.gif

App Delegate: will enter foreground
App Delegate: did become active


双机home键然后向上滑动结束app


twiceHomeButton.gif

App Delegate: will terminate
也可以是App Delegate: did enter background.
关键是看app是否支持background 执行.


保存数值的类和方法

了解完一个app的state转换。然后就到用什么类了。
其它更多特性的类和方法,留在以后章节介绍。
这里是使用比较简单的类。能用它保存用户设定的值

NSUserDefaults 保存值

用NSUserDefaults保存数值

NSUserDefaults.standardUserDefaults().defaults.setFloat(22.5 forKey: “myValue”)

用NSUserDefaults取回数值

let value = NSUserDefaults.standardUserDefaults().floatForKey(“myValue”)

保存文件

app文件保存目录

每个app都是独立的。沙盒结构。
app目录


App File结构

建立FilePath

let filename = "usersVoice.wav"
let dirPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! String
let pathArray = [dirPath, filename]
let fileURL =  NSURL.fileURLWithPathComponents(pathArray)!

用NSFileManager检查文件是否存在

if NSFileManager.defaultManager().fileExistsAtPath(audioFileURL().path!) {
    shouldSegueToSoundPlayer = true       
}

本章节是是使用NSDefault 保存数值,下一章节如何使用NSCoder/NSKeyedArchiver保存数据,介绍如何保存复杂的Object

上一篇 下一篇

猜你喜欢

热点阅读