NSuserDeafaults和对象归档

NSUserDefaults类提供了一个默认的系统编程接口进行交互 一般用来保存应用程序相关的偏好设置 配置数据等 通过键值对来存储数据 一般用来存储单条数据

 //通过单例来创建NSuserDefaults的对象
        var userDefault = NSUserDefaults.standardUserDefaults()
        //也可以通过初始化方法 参数suitname标示该对象的组名称
        var userDefault1 = NSUserDefaults(suiteName: "SwiftClass")
        //输出所有的键值对
        print(userDefault.dictionaryRepresentation())

 //判断nsuserDefaluts的appMessage 在dictionaryRepression中是否存在
        //不存在就设置为this is app message
        if userDefault.objectForKey("appMessage") == nil {
            userDefault.setObject("this is my default message", forKey: "appMessage")
            //获取某个key的值
            var dic = userDefault.dictionaryRepresentation()
            var object_one = (dic as NSDictionary).objectForKey("AppleKeyBoards")
            //或者
            var object_two = dic["AppleKeyBoards"]
            //需要解包才能使用object对象
            if let ovalue = object_one {
                print(ovalue)
            }
        }
//一些非常方便的方法来设置和获取常用的类型
        userDefault.setInteger(123456, forKey: "Int")
        //读取
        var intValue = userDefault.integerForKey("Int")
        print(intValue)
        //float类型的
        userDefault.setFloat(3.2, forKey: "float")
        var floatValue = userDefault.floatForKey("float")
        print(floatValue)
        //double类型的
        userDefault.setDouble(5.6, forKey: "Double")
        var doubleValue = userDefault.doubleForKey("Double")
        //bool类型的
        userDefault.setBool(true, forKey: "Bool")
        var boolValue = userDefault.boolForKey("Bool")
        print(boolValue)
        //NSURL类型的 地址类型的
    userDefault.setURL(NSURL(string: "http://www.baidu.com"), forKey: "url")
        var urlValue = userDefault.URLForKey("url")
        

系统对象实现存储,需要通过archivedDataWithRootObject方法转化成为NSDate作为载体 才可以存储

 //转化成NSData流
        var imageData = NSKeyedArchiver.archivedDataWithRootObject(UIImage(named: "swift.png")!)
        //存储为NSData对象
        userDefault.setObject(imageData, forKey: "imageData")

获取对象的方法

 //获取对象的方法
        //获取NSData
        var objData = userDefault.objectForKey("imageData")
        //还原对象
        var myImage = NSKeyedUnarchiver.unarchiveObjectWithData(objData as! NSData)
        //输出对象
        print(myImage)

 //删除操作
        var ar:NSDictionary = userDefault.dictionaryRepresentation()
        for key in ar.allKeys {
            userDefault.removeObjectForKey(key as! String)
            //内存中的数据同步跟新到数据库中
            userDefault.synchronize()
文件的操作

获取HOME目录

//获取程序的home目录
        let homeDirectory = NSHomeDirectory()
        print(homeDirectory)

Document目录是苹果建议将程序中建立的或在程序中浏览过的文件数据保存在该目录下 itunes备份和恢复的时候会包括此目录

获取document目录

 let documentPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true)
        let documentPaths = documentPath[0] as String
        //或者通过home目录自己添加文件夹
        var documentPath2 = homeDirectory + "/Documents"
        print(documentPath2)

Library/prefenevces主要防治偏好设置的文件 通过nsuserdefault来进行设置

library/caches 主要放置一些缓存的文件 itunes不会备份此目录

 //获取library目录
        let libraryPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.LibraryDirectory, NSSearchPathDomainMask.AllDomainsMask, true)
        let library = libraryPath[0] as String
        //或通过home进行追加
        let library2 = homeDirectory + "/Library"
        //获取cache目录
        let catchpath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory, NSSearchPathDomainMask.AllDomainsMask, true)
        let catchPath1 = catchpath[0] as String
        //或通过home目录追加
        let catchPath2 = homeDirectory + "/Library/Caches"

tmp目录,主要用来存放临时文件 保存应用程序再次启动过程中不需要的信息,重启后清空,获取tmp目录的代码如下

let tmpDir = NSTemporaryDirectory()
        //或通过home目录进行追加
        var tmpDir2 = homeDirectory + "/tmp"

对于文件的操作 首先要设置一个文件管理器

//创建文件管理器
        var fileManager = NSFileManager.defaultManager()
        //对于文件的操作有可能会有错误的生成 因此要定义一个错误
        var error:NSError?
        //创建目录 自定义的
        let myFile = homeDirectory + "/Documents/myFolder/Images"
     //创建目录 withIntermediateDirectories要设置为true 代表中间路径如果不存在的话 会创建这样的路径
        do {var isSuccess = try fileManager.createDirectoryAtPath(myFile, withIntermediateDirectories: true, attributes: nil)
    }
        catch{
            print("error")
        }
    }

写入文件

//创建文件
        var filePath = myFile + "/appInfo.txt"
        var info = "caokaiqnag"
        do { try  info.writeToFile(filePath, atomically: true, encoding: NSUTF8StringEncoding)
        }
        catch{
            print("error")
        }

判断目录是否存在

通过文件管理器来处理

 var exist = fileManager.fileExistsAtPath("filePath")

移动文件的路径

do {try  fileManager.moveItemAtPath(filePath2, toPath: filePath)
        }
        catch{
            print("error")
        }

文件的拷贝

 var filePath4 = NSHomeDirectory()
        do {try fileManager.copyItemAtPath("filePath", toPath: filePath4)
        }
        catch{
            print("error")
        }

获取所有的文件

   var filePath5 = fileManager.subpathsAtPath(NSHomeDirectory())

还有很多其他的操作



你可能感兴趣的:(NSuserDeafaults和对象归档)