默认文件夹及其路径获取方式
应用程序包:应用程序当中的源文件位置。
let path = NSBundle.mainBundle().bundlePath
let filePath = NSBundle.mainBundle().pathForResource(name: String?, ofType: String?)
App 主目录
class func getPathWithApp() -> String {
return NSHomeDirectory()
}
Document:最常用目录,会被 iTunes 同步。
class func getPathWithDocument() -> String {
return NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).first!
}
Library
class func getPathWithLibrary() -> String {
return NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.LibraryDirectory, NSSearchPathDomainMask.UserDomainMask, true).first!
}
Library/Caches:iTunes 不会同步,适合体积大但不需要备份的文件
class func getPathWithCaches() -> String {
return NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory, NSSearchPathDomainMask.UserDomainMask, true).first!
}
Library/Preferences:iTunes 会同步。通常保存应用信息。
let userDefault = NSUserDefaults.standardUserDefaults()
tmp:iTunes 不会同步此文件,放置临时文件,系统可能会自行删除。
class func getPathWithTmp() -> String {
var tmp = NSTemporaryDirectory()
tmp.removeAtIndex(tmp.endIndex.predecessor())
return tmp
}
存储以及读取方式
Plist文件可保存格式
- 基础值类型
- NSArray; NSMutableArray
- NSDictionary; NSMutableDictionary
- NSData; NSMutableData
- NSDate
- NSNumber
保存方式
直接保存到某个路径,则使用各个类型的 writeToFile: atomically:
方法。
存入 Plist 中则直接用对应类型的 NSUserDefaults.standardUserDefaults().setObject(value: AnyObject?, forKey: String)
方法。
读取方式
直接从某个路径读取,则使用各个类型的 contectsOfFile:
初始化器方法。
Plist 中的信息则通过对应类型的 let someThing = NSUserDefaults.standardUserDefaults().objectForKey(defaultName: String)
方法获取。
归档
NSCoding
需要进行归档的类需要遵循 NSCoding 协议,并实现以下两个方法。x 为被存储的 Int 属性。
let x = 0
required init?(coder aDecoder: NSCoder) {
x = aDecoder.decodeIntegerForKey("Key")
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeInteger(x, forKey: "Key")
}
归档方法
// 使用KeyedArchiver进行归档操作
class func archiverObject(objectDictionary objectDictionary:[String:AnyObject]) -> NSData {
let data = NSMutableData()
let archiver = NSKeyedArchiver(forWritingWithMutableData: data)
for (key, object) in objectDictionary {
archiver.encodeObject(object, forKey: key)
}
archiver.finishEncoding()
return data
}
// 简便归档操作
class func archiverObject(object object:AnyObject) -> NSData {
return NSKeyedArchiver.archivedDataWithRootObject(object)
}
解档方法
// 使用KeyedArchiver进行解档操作
class func unarchiverObject(data data:NSData, keys:[String]) -> [AnyObject] {
let unarchiver = NSKeyedUnarchiver(forReadingWithData: data)
var object:[AnyObject] = []
for key in keys {
object.append(unarchiver.decodeObjectForKey(key)!)
}
unarchiver.finishDecoding()
return object
}
// 简便解档操作
class func unarchiverObject(data data:NSData) -> AnyObject {
return NSKeyedUnarchiver.unarchiveObjectWithData(data)!
}