日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

读写应用程序数据-NSUserDefault、对象归档(NSKeyedArchiver)、文件操作

發布時間:2023/12/31 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 读写应用程序数据-NSUserDefault、对象归档(NSKeyedArchiver)、文件操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ios中數據持久化存儲方式一般有5種:NSUserDefault、對象歸檔(NSKeyedArchiver)、文件操作、數據庫存儲(SQLite3)、CoreData。

1、NSUserDefault用于保存程序相關的偏好設置和配置數據等,以便下次啟動程序后能恢復上次的設置。

NSUserDefault和對象歸檔

1 //通過單利來創建一個NSUserDefaults對象,全局變量NSUserDefault,可在整個項目傳遞變量 2 let userDefault:NSUserDefaults = NSUserDefaults.standardUserDefaults() 3 4 //通過init方法創建 5 let userDefault1:NSUserDefaults = NSUserDefaults(suiteName: "SwiftClass")! 6 print(userDefault1.dictionaryRepresentation()) 7 8 //獲取userDefault單利下所有的值 9 print(userDefault.dictionaryRepresentation()) 10 11 //判斷NSUserDefaults的“appMessage”key 在dictionaryRepresentation中是否存在,如果不存在就設置“appMessage”值為This is app message。 12 if(userDefault.objectForKey("message") == nil){ 13 userDefault.setObject("This_is_my_default_message", forKey: "message") 14 } 15 16 //如果想單獨看某個key的設置,例如: 17 let dic = userDefault.dictionaryRepresentation() 18 let object_one:AnyObject? = (dic as NSDictionary).objectForKey("AppleKeyboards") 19 // //或者 20 // var object_one:AnyObject? = dic["AppleKeyboards"] 21 22 if let oValue: AnyObject! = object_one { 23 print(oValue) 24 } 25 26 27 //Int類型 28 //設置 29 userDefault.setInteger(123456, forKey: "Int") 30 //讀取 31 let intValue = userDefault.integerForKey("Int") 32 print(intValue) 33 34 //Float類型 35 //設置 36 userDefault.setFloat(3.2, forKey: "Float") 37 //讀取 38 let floatValue = userDefault.floatForKey("Float") 39 print(floatValue) 40 41 //Double類 42 //設置 43 userDefault.setDouble(5.6890, forKey: "Double") 44 //讀取 45 let doubleValue = userDefault.doubleForKey("Double") 46 print(doubleValue) 47 48 //Bool類型 49 //設置 50 userDefault.setBool(true, forKey: "Bool") 51 //讀取 52 let boolValue = userDefault.boolForKey("Bool") 53 print(boolValue) 54 55 //NSURL類型 56 //設置 57 userDefault.setURL(NSURL(string: "http://www.iphonetrain.com")!, forKey: "NSURL") 58 //讀取 59 let urlValue = userDefault.URLForKey("NSURL") 60 print(urlValue) 1 //保存NSDate數據 2 //將對象轉換成NSData流 3 let imageData:NSData = NSKeyedArchiver.archivedDataWithRootObject(UIImage(named: "SwiftClassWeiXin.png")!) 4 5 //存儲NSData對象 6 userDefault.setObject(imageData, forKey: "imageData") 7 8 //讀取數據 9 //獲取NSData 10 let objData:AnyObject? = userDefault.objectForKey("imageData") 11 12 //還原對象-初始一個UIImage對象 13 let myImage:AnyObject? = NSKeyedUnarchiver.unarchiveObjectWithData(objData as! NSData) 14 15 print(myImage) 1 //自定義的類實現存取需要通過NSData做載體 2 3 //創建AppsModel的實例 4 let model = AppsModel(imageName: "appIcon2.png", app_Name: "租房點評", app_Description: "租房被騙?現在開始,你來改變這一切!《租房點評》為你而備,租房無憂!") 5 6 //實例對象轉換成NSData 7 let modelData:NSData = NSKeyedArchiver.archivedDataWithRootObject(model) 8 9 //存儲NSData對象 10 userDefault.setObject(modelData, forKey: "myAppModel") 1 //保存NSString, 2 userDefault.setValue("1_NSString", forKey: "NSString") 3 userDefault.setObject("1_NSString1", forKey: "NSString1") 4 5 //保存NSNumber, 6 let number:NSNumber = NSNumber(int: 32) 7 userDefault.setValue(number, forKey: "number") 8 userDefault.setObject(number, forKey: "number1") 9 10 //保存NSArray 11 let array1:NSArray = NSArray(array:["22222","33333"]) 12 userDefault.setValue(array1, forKey: "array") 13 userDefault.setObject(array1, forKey: "array1") 14 15 //保存NSDictionary 16 let dictionary:NSDictionary = NSDictionary(dictionary: ["1":"1111"]) 17 userDefault.setValue(dictionary, forKey: "dictionary") 18 userDefault.setObject(dictionary, forKey: "dictionary1") 1 var value:AnyObject? = userDefault.valueForKey("dictionary") 2 print(value) 3 4 value = userDefault.objectForKey("dictionary1") 5 print(value) 6 7 8 9 //-------- 刪除所有的值 10 let ar:NSDictionary = userDefault.dictionaryRepresentation() 11 12 for key in ar.allKeys { 13 14 userDefault.removeObjectForKey(key as! String) 15 16 userDefault.synchronize()//內存中數據同步更新數據庫 17 }

2、文件操作

應用開發中所有的非代碼文件都存儲在沙盒中。

1 //1、獲取程序的Home目錄 2 let homeDirectory = NSHomeDirectory() 3 print(homeDirectory) 4 5 6 //2、獲取Documents目錄 7 let documentPaths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true) 8 9 let documentPath = documentPaths[0] 10 print(documentPath) 11 12 //或通過home目錄自己追加文件夾 13 let documentPath2 = homeDirectory + "/Documents" 14 print(documentPath2) 15 16 //3、獲取Library目錄 17 let libraryPaths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.LibraryDirectory, NSSearchPathDomainMask.UserDomainMask, true) 18 let libraryPath = libraryPaths[0] 19 print(libraryPath) 20 21 //或通過home目錄自己追加文件夾 22 let libraryPath2 = homeDirectory + "/Library" 23 print(libraryPath2) 24 25 26 27 28 //4、獲取Cache目錄 29 let cachesPaths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory, NSSearchPathDomainMask.UserDomainMask, true) 30 let cachesPath = cachesPaths[0] 31 print(cachesPath) 32 33 //或通過home目錄自己追加文件夾 34 let cachesPath2 = homeDirectory + "/Library/Caches" 35 print(cachesPath2) 36 37 38 //5、獲取Tmp目錄 39 let tmpDir = NSTemporaryDirectory() 40 print(tmpDir) 41 42 //或通過home目錄自己追加文件夾 43 let tmpDir2 = homeDirectory + "/tmp" 44 print(tmpDir2)

對文件操作需要先創建一個文件管理器

// 創建文件管理器let fileManager :NSFileManager = NSFileManager.defaultManager() 1 //創建目錄 2 //定義幾個自己的目錄 3 let myDirectory1:String = NSHomeDirectory() + "/Documents/myFolder/Images" 4 let myDirectory2:String = NSHomeDirectory() + "/Documents/myFolder/Films" 5 let myDirectory3:String = NSHomeDirectory() + "/Documents/myFolder/Musics" 6 let myDirectory4:String = NSHomeDirectory() + "/Documents/myFolder/Files" 7 8 //創建目錄 9 //withIntermediateDirectories 設置成true,代表中間所有的路徑目錄如果不存在,都會創建 10 //如果設置成false,因為myFolder目錄不存在,所以無法創建1234目錄 11 12 //創建myDirectory1目錄 13 do 14 { 15 try fileManager.createDirectoryAtPath(myDirectory1, withIntermediateDirectories: true, attributes: nil) 16 } 17 catch let error as NSError { 18 print(error)//如果創建失敗,error 會返回錯誤信息 19 } 20 21 //創建myDirectory2目錄 22 do 23 { 24 try fileManager.createDirectoryAtPath(myDirectory2, withIntermediateDirectories: true, attributes: nil) 25 } 26 catch let error as NSError { 27 print(error)//如果創建失敗,error 會返回錯誤信息 28 } 29 30 //創建myDirectory3目錄 31 do 32 { 33 try fileManager.createDirectoryAtPath(myDirectory3, withIntermediateDirectories: true, attributes: nil) 34 } 35 catch let error as NSError { 36 print(error)//如果創建失敗,error 會返回錯誤信息 37 } 38 39 //創建myDirectory4目錄 40 do 41 { 42 try fileManager.createDirectoryAtPath(myDirectory4, withIntermediateDirectories: true, attributes: nil) 43 } 44 catch let error as NSError { 45 print(error)//如果創建失敗,error 會返回錯誤信息 46 }

Swift 的錯誤處理機制要求你必須使用 do-catch 語句來捕獲所有的錯誤并處理他們。

//創建文件let filePath = myDirectory1 + "/appInfo.txt"let info = "經常聽到:被中介騙了,押金不退,晚一天交房租,被訛了。租房普遍現象:網上報價不真實?經常被忽悠!(看房時報價都比網上高!)證件不齊全,被騙過!(其實根本不是房東啦!)看房前態度都很熱情! 簽約之后態度驟變!入住后家電維修只能靠自己! 房屋到期,押金各種被勒索!現在開始,你來改變這一切!《租房點評》為你而備,租房無憂!再也不用擔心被欺騙,想要知道給你介紹房子的人好不好,《租房點評》告訴你!"

通過writeToFile方法,將一些對象寫入到文件中

do{try info.writeToFile(filePath, atomically: true, encoding: NSUTF8StringEncoding)}catch let error as NSError {print(error)//如果創建失敗,error 會返回錯誤信息} //保存圖片let image = UIImage(named: "SwiftClassWeiXin@3x.png")let data:NSData = UIImageJPEGRepresentation(image!, 1.0)!let data1:NSData = UIImagePNGRepresentation(image!)!data.writeToFile(myDirectory1 + "/SwiftClassIcon.jpg", atomically: true)data1.writeToFile(myDirectory1 + "/SwiftClassIcon.png", atomically: true)//保存NSArraylet array = NSArray(objects: "111","222","333")array.writeToFile(myDirectory4 + "/array.plist", atomically: true)//保存NSDiclet dictionary = NSDictionary(objects: ["1111","22222","33333"], forKeys: ["1","2","3"])dictionary.writeToFile(myDirectory4 + "/dictionary.plist", atomically: true) //判斷目錄或文件是否存在let exist = fileManager.fileExistsAtPath(filePath)print(exist)//移動let filePath2 = myDirectory4 + "/appInfo.txt"do{try fileManager.moveItemAtPath(filePath, toPath: filePath2)}catch let error as NSError {print(error)//如果創建失敗,error 會返回錯誤信息 }//重命名//通過移動該文件對文件重命名let filePath3 = myDirectory4 + "/appInfo2.txt"do{try fileManager.moveItemAtPath(filePath2, toPath: filePath3)}catch let error as NSError {print(error)//如果創建失敗,error 會返回錯誤信息 }//拷貝let filePath4 = myDirectory4 + "/appInfoCopy.txt"do{try fileManager.copyItemAtPath(filePath3, toPath: filePath4)}catch let error as NSError {print(error)//如果創建失敗,error 會返回錯誤信息} //獲取目錄列里所有文件名//先拷貝一些文件到myDirectory4目錄下let filePath00 = myDirectory4 + "/appInfoCopy00.txt"let filePath11 = myDirectory4 + "/appInfoCopy11.txt"let filePath22 = myDirectory4 + "/appInfoCopy22.txt"do{try fileManager.copyItemAtPath(filePath3, toPath: filePath00)try fileManager.copyItemAtPath(filePath3, toPath: filePath11)try fileManager.copyItemAtPath(filePath3, toPath: filePath22)}catch let error as NSError {print(error)//如果創建失敗,error 會返回錯誤信息} //獲取所有文件let fileArray = fileManager.subpathsAtPath(myDirectory4)print(fileArray)// Optional([appInfo.txt, appInfo2.txt, appInfoCopy.txt, appInfoCopy00.txt, appInfoCopy11.txt, appInfoCopy22.txt])//iPhone中獲取文件各項屬性方法//獲取文件屬性do{var fileAttributes : [NSObject:AnyObject]? = try NSFileManager.defaultManager().attributesOfItemAtPath(filePath22)//獲取文件的創建日期let modificationDate:AnyObject? = fileAttributes![NSFileModificationDate]print(modificationDate)//獲取文件的字節大小let fileSize:AnyObject? = fileAttributes![NSFileSize]print(fileSize)}catch let error as NSError {print(error)//如果創建失敗,error 會返回錯誤信息} //刪除文件do{try fileManager.removeItemAtPath(filePath4)}catch let error as NSError {print(error)//如果創建失敗,error 會返回錯誤信息 }//刪除目錄下所有文件//方法1: 獲取所有文件,然后遍歷刪除let fileArray2 : [AnyObject]? = fileManager.subpathsAtPath(myDirectory4)for fn in fileArray2!{do{try fileManager.removeItemAtPath(myDirectory4 + "/\(fn)")}catch let error as NSError {print(error)//如果創建失敗,error 會返回錯誤信息 }}//方法2:刪除目錄后重新創建該目錄do{try fileManager.removeItemAtPath(myDirectory4)try fileManager.createDirectoryAtPath(myDirectory4, withIntermediateDirectories: true, attributes: nil)}catch let error as NSError {print(error)//如果創建失敗,error 會返回錯誤信息 }}

?

總結

以上是生活随笔為你收集整理的读写应用程序数据-NSUserDefault、对象归档(NSKeyedArchiver)、文件操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。