ios開發數據存儲
『壹』 iOS開發怎麼獲取本地數據和把數據存儲到本地
一般獲取本地數據是從plist文件中讀取JSON數據。
讀取數據:
NSString
*plistPath
=
[[NSBundle
mainBundle]
pathForResource:@"city"
ofType:@"plist"];
NSArrary
*cityArray
=
[[NSArray
alloc]initWithContentsOfFile:plistPath];
這里的cityArray根據你存在plist中的數據類型來確定,如果plist中是字典類型,那麼你這里需要使用NSDictionary去存儲你從plist中獲取到的數據。
至於本地存儲數據的話根據你項目的具體功能來設計,一般的小型數據如用戶昵稱、手機號等使用NSUserDefault即可,但是如果是大量數據如賬單類app中的賬單數據那麼此時需要考慮使用sqlite3去存儲數據,至於密碼之類就需要使用NSKeydArchiver去存儲。
『貳』 iOS數據存儲(一)介紹
iOS本地化存儲的數據保存在沙盒中。
(1) Documents :iTunes會備份該目錄。一般用來存儲需要持久化的數據。
(2) Library/Caches :緩存,iTunes不會備份該目錄。內存不足時會被清除,應用沒有運行時,可能會被清除。一般存儲體積大、不需要備份的非重要數據。
(3) Library/Preference :iTunes同會備份該目錄,可以用來存儲一些偏好設置。
(4) tmp : iTunes不會備份這個目錄,用來保存臨時數據,應用退出時會清除該目錄下的數據。
獲取沙盒文件:
其中:
可以把字典或數組直接寫入到文件中。另外, NSString 、 NSData 、 NSNumber 等類型,也可以使用 writeToFile:atomically: 方法直接將對象寫入文件中,只是 Type 為空。
NSUserDefaults是輕量級存儲,一般使用它來進行一些設置的記錄,比如用戶ID,開關是否打開等設置,通過鍵值對的方式記錄設置,所以這個有時候也被稱為偏好設置。
NSUserDefaults可以存儲的數據類型包括: NSData 、 NSString 、 NSNumber 、 NSDate 、 NSArray 、 NSDictionary 。如果要存儲其他類型,則需要轉換為前面的類型,才能用NSUserDefaults存儲。
也可以寫成宏定義
『叄』 iOS開發中關於用戶信息的存儲的思考
之前項目中在展示用戶數據的時候都是先直接從網路獲取,然後再展示,之所以這樣做而不將用戶數據存儲到本地再展示的原因是當時考慮到如果用戶在其他設備上對該用戶的數據進行了修改那麼原來設備上用戶信息的展示就會出錯,還是從網路獲取的數據可靠。(存儲到本地同樣能正確展示用戶數據,只怪自己當初沒深入思考過這個問題)
先從網路獲取用戶數據再展示用戶數據會有一個問題,由於網路請求數據是需要一定時間的,這樣當我打開一個包含用戶數據的頁面的時候會有片刻時間無法看到用戶的數據,尤其在這個頁麵包含用戶頭像的時候這個效果(閃屏)更加明顯,給用戶的體驗不是很好。
我們可以在項目中創建一個存儲用戶信息的類,這個類可以將用戶信息存儲到本地,在展示用戶數據的時候 先從本地去取數據 這樣就不會有之前片刻時間看不到用戶數據的閃屏效果, 再從網路上獲取數據同時將數據存儲到本地,再重復從本地取的操作(這樣能保證數據是最新的,不會出錯) 。
存儲用戶數據到本地有三個要點需要注意:
這個存儲用戶數據的類相當於一個中介,在從網路獲取到數據時並沒有直接去展示用戶數據而是先將數據放到了中介中,在展示用戶數據的時候再去這個存儲了用戶數據的中介中去取數據。
本篇文章到這里就結束了,願大家加班不多工資多,男同胞都有女朋友,女同胞都有男朋友。😊
『肆』 iOS開發怎麼獲取本地數據和把數據存儲到本地
一般獲取本地數據是從plist文件中讀取JSON數據。
讀取數據:
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"city" ofType:@"plist"];
NSArrary *cityArray = [[NSArray alloc]initWithContentsOfFile:plistPath];
這里的cityArray根據你存在plist中的數據類型來確定,如果plist中是字典類型,那麼你這里需要使用NSDictionary去存儲你從plist中獲取到的數據。
至於本地存儲數據的話根據你項目的具體功能來設計,一般的小型數據如用戶昵稱、手機號等使用NSUserDefault即可,但是如果是大量數據如賬單類app中的賬單數據那麼此時需要考慮使用sqlite3去存儲數據,至於密碼之類就需要使用NSKeydArchiver去存儲。
『伍』 iOS存儲技術-Keychain
鑰匙串這個技術大家每天都在用,它相當於一個容器,裡面有已加密的和未加密的用戶信息,它是怎麼實現安全儲存Mac、App、伺服器和網站的帳戶,開發過程中又該怎麼使用這個技術呢。通過一個例子來介紹一下:
用戶要登錄你的APP,這個時候用戶在文本框輸入了他的用戶信息和密碼,那麼你該如何存儲這個信息?自然我們會有一個類似用戶的結構來存儲用戶信息
這個結構里有一個String類型的用戶名稱和一個String類型的密碼變數, 張三輸入了它自己的用戶名「zhangsan」和密碼「******」來登陸,那麼我們就會有一個生成用戶的過程
那麼接下來你希望存儲到Keychain中,Keychain有哪些方法呢?第一步自然是添加
函數有三個參數,但是每個似乎都不認識,所以我們先簡單看一下這三個參數要做什麼
第一個參數是個字典,那自然是由許多key-value構成,首先它要包含一個這個數據的類型,數據類型使用kSecClass來做key,kSecClass的定義:
可以看到kSecClass是一個CFString類型的全局變數,它其中可用的值由Item Class Keys and Values列出。根據數據類型的不同有不同的值,例如密碼、認證,對於密碼它的值定義為:
也是一個CFString類型的變數, class對應的值會決定數據是否被加密,當選擇這個password的時候數據就會被加密。那麼我們字典中的第一個key-value對就有了:
那麼這個字典還需要包含什麼呢? 賬號:也就是這個數據是誰的數據,這個屬性由kSecAttrAccount這個Key來定義,同樣它也是一個CFString類型的Key,它的值是你自定義的一個CFString類型的值。當然這個屬性並不是必須的,於是字典中的第二個key-value對也有了
⚠️注意
字典中除了用戶名還需要用戶的數據,數據使用kSecValueData這個Key來定義,同樣是CFString類型的Key,但是用戶的數據可能多種多樣,所以它的值類型是CFData。那麼就需要把用戶的信息加工一下
這樣就得到了字典中第三個key-value對:
既然是鑰匙串,那就不能隨時隨地訪問,需要訪問控制許可權,所謂訪問控制就是你希望當iPhone解鎖的時候,或者是驗證了用戶的指紋之後才能繼續進行的過程。許可權由kSecAttrAccessControl這個Key來表示,它所對應的值是一個SecAccessControl的實例,而SecAccessControl又是什麼?
它就是一個包含Keychain對象怎麼被使用的信息的一個不透明類型,來看看它的實例化
它通過(CFAllocatorRef allocator, CFTypeRef protection, SecAccessControlCreateFlags flags, CFErrorRef _Nullable *error)函數來創建
函數有四個參數:
1.第一個參數是用來初始化SecAccessControlRef對象的. 我們可以傳 NULL 或者kCFAllocatorDefault
2.第二個參數是控制設備什麼情況下可以訪問這個Keychain信息, 它的值可以是添加Keychain函數的第一個參數字典中的一個其它key(kSecAttrAccessible)對應的值,例如可以控制當設備解鎖的時候使用的值:: CFString。其它可使用的還有(只有這台設備且設置了密碼)、(只有這個設備第一次解鎖後)。
3.第三個參數是一組額外的訪問控制:用來控制用戶級別的訪問許可權,如果設備沒有密碼總是處於unlocked的狀態,你可能希望進一步限制KeyChain訪問。例如在獲取銀行賬戶的認證時候,需要在獲取認證信息之前驗證是不是授權用戶在操作,這使得KeyChain可以根據用戶的輸入來管理對Keychain的訪問,可以選擇devicePasscode來限制需要用戶需要輸入密碼或者是選擇userPresence來讓系統根據當前狀態選擇一種驗證方式或者是多種方式的組合
第四個是失敗原因的一個指針,這里暫時傳一個nil值
所以我們可以通過來獲得一個訪問控制的參數
⚠️注意
現在我們可以回到之前創建函數的第一個參數字典的分析了,我們得到了
SecAccessControl的實例,所以字典的第四個key-value對也有了:
現在字典中有了數據的類型、哪個用戶的數據、用戶要存儲的數據、什麼條件可以訪問這個數據。看起來不缺少什麼了。我們的一個字典參數就處理好了:
函數會通過第二個參數來返回新添加的Keychain,具體的類型是根據第一個參數中指定的返回類型決定的(例如可以通過kSecReturnData這個可以指定返回類型為CFData) 當然,通常我們可以忽略這個返回的數據,所以可以傳一個nil值
函數還有一個返回值,從聲明上看是一個OSStatus類型的值,相應的定義在Security Framework Result Codes中,常見的值有:
我們通常需要將返回值和已知的返回值相比較來判斷是否操作成功了,也就是我們通常可以使用如下的語句來處理添加操作
至此,添加操作就完成了。
查詢主要使用SecItemCopyMatching(CFDictionaryRef query, CFTypeRef _Nullable *result)函數,函數會返回一個或者多個item,或者是指定的item屬性的,默認情況下只會返回匹配的第一個結果。
函數的第一個參數就是和添加Keychain函數的參數一樣的結構,通常有Keychain的class也就是由kSecClass為Key的一個key-value對。
屬性:屬性就是Keychain結果需要符合的條件,例如想查找哪個用戶的數據,查詢參數還可以帶控制返回的key,因為添加方法和查詢方法都會返回結果的數據和屬性到提供的參數指針里,所以可以指定返回的key來控制指針對應的返回數據的格式,也就是通常的密碼查詢應該包含kSecReturnData為Key的key-value對。
例如可以使用kSecReturnPersistentRef這個Key來獲得一個CFData的引用,然後可以把它存儲在磁碟或在進程間傳遞,可以在這之後調用另一個SecItemCopyMatching函數將持久化引用轉為常規引用,函數參數里需要將持久化的引用的數組作為kSecMatchItemList的值傳入。如果使用kSecReturnData來控制返回data本身,搜索會返回一個代表實際數據的CFData,這個就是典型的密碼Keychain的使用方式。同時,Keychain服務會在返回給你之前對數據進行解密
搜索參數:這個參數可以包含一些結果的數量條件,控制string屬性是否大小寫敏感等。
所以,希望查詢上面的用戶信息的時候查詢字典參數會如下所示
函數的第二個參數是一個CFTypeRef類型的接收函數返回的指針,我們需要先定義一個這樣的指針:
同樣我們需要判斷函數返回值是否成功:
因為查詢字典參數里攜帶了kSecReturnData,所以這個指針指向的數據類型是一個CFData類型的參數,我們需要獲取對應的值
這樣 str就是我們之前存儲在KeyChain中的用戶信息了
至此,Keychain的添加和刪除都已經具備了,基本的用戶需求就解決了。
除了基礎的使用之外,我們還可以
這些,下次再說吧
『陸』 iOS開發-iCloud環境配置及使用
配置iCloud,首先你就先要有一個真實的蘋果開發者賬號,沒錯,就是一年688的那個。開通了之後,在Xcode中新建一個項目。然後在 TARGETS -> Capabilities -> iCloud 中打開開關就可以了。
就像這樣,是不是很簡單啊。
誒,可是好像有什麼地方不對,有些地方爆紅了。
這是因為我們還沒有給這個App ID 注冊,所以接下來我們去蘋果的 開發者官網 添加一個App ID,在添加的時候勾選 iCloud 服務就可以啦。
什麼?你說你已經創建過App ID了???沒關系,在管理App ID這邊選擇 Edit ,然後在勾選 iCloud 也是一樣的。
這時候回到Xcode中在看一下,應該就已經沒有爆紅了吧。
什麼???還有爆紅??? 那你重啟一下XCode試試吧。再不行,你重啟一下電腦試試好了。
在Xcode中 iCloud 下邊一共有三個可以勾選的服務,其中第一個就是 key-value storage ,這個也是最簡單的 iCloud 使用方法了,他跟 NSUserDefaults 的使用方法基本一樣,都是以鍵值對的方式存儲數據。只不過處理iCloud的類為 NSUbiquitousKeyValueStore 。
存儲數據的方式很簡單,只要使用 setObject:forkey: 之後,使用 synchronize 同步一下就可以了。
獲取數據的方式也一樣,是要使用 objectForKey 就可以了。
看一下 NSUbiquitousKeyValueStore 的頭文件,我們發現他還有一個通知消息
注冊這個通知,就可以在數據修改的時候接收到通知,然後做對應的處理。最好的驗證方法就是在存儲了數據之後直接刪除掉這個app,然後再次安裝,這個時候就會觸發該通知。
先放一下demo的[ 地址 。
以上就是關於配置iCloud和key-value存儲的簡單使用,後邊我們再看看其他兩種服務是怎麼樣使用的。
相較於key-value的存儲類型,Documents是用來管理一些比較大的文件,比如用戶創建的文檔等等。
在我們打開iCloud選項的時候,系統就是自動為我們添加一個 xxx.entitlements 的文件,這個東西用來保證應用的安全性,確保只有你的應用才能訪問你自己創建的文檔,系統也是依賴於他來區分用戶的iCloud賬戶中每個應用的文檔。
查看這個 xxx.entitlements 我們會發現在他里邊有這樣的一個key Ubiquity Container Identifiers ,對應的value為 iCloud.$(CFBundleIdentifier) 。其實這個 $(CFBundleIdentifier) 就代表這你的APP ID。所以也可以看成是 iCloud.com.zzr.ZZRiCloudDemo 。
NSFileManager 主要是對文件的操作,我們用它來獲取iCloud的存儲地址。
根據我們的entitlements,通過 NSFileManager 就可以獲得iCloud的存儲地址,在獲取地址之後,我們要先判斷一下獲取的地址是否為空,如果這個地址為空,則說明用戶的iCloud暫時不可用,接下來一切的操作都沒辦法進行下去。
UIDocument 主要是用於對文件內容的操作。
其實獲取了文件的地址之後,我們已經可以直接對文件進行操作了,但是官方還是讓我們通過 UIDocument 來操作,因為當我們在對iCloud進行操作的時候,不止是只有我們自己對他進行操作, iCloud daemon 也會對iCloud操作,用 UIDocument 操作能夠保證存取安全。
在使用 UIDocument 之前,我們新建一個類,繼承於 UIDocument ,並且重寫兩個方法:
NSMetadataQuery 主要用來查詢數據。
有了之前的准備工作,創建一個文檔就非常簡單了,只要創建好我們要保存的文件,通過
就可以將文檔上傳到iCloud中了。
我們以一個txt文件作為示範。
修改文檔,其實就是重寫文檔,就是將上邊創建文檔中的 UIDocumentSaveForCreating 改為 UIDocumentSaveForOverwriting 。
刪除文檔其實就是通過之前的地址獲取到文件,然後調用remove方法即可。
之前講了增加、刪除、修改,好像增刪改查中只剩下查詢這個方法沒有介紹了。查詢和前邊幾個有點不同,他需要用到 NSMetadataQuery 。
直接調用 startQuery 開始查詢,iCloud就已經開始幫我們查詢了,查詢好之後,iCloud會通過通知來告訴我們查詢到了東西。
所以我們注冊兩個通知
並相應他們
其中
就是查詢到的內容的數組,遍歷他,就可以獲取到對應目錄下的全部文件了。
先放一下demo的 地址 。
demo簡單的製作了一個text文檔的存儲功能,一些交互沒有完善,但是基本的增刪改查功能都已經實現了。
以上就是 iCloud Document 的簡單使用。此文章僅供個人學習使用,如有不當,希望大佬指出。
『柒』 ios數據的持久化存儲方式有哪些
對於數據的持久化存儲,ios中一般提供了4種不同的機制。
1.屬性列表
2.對象歸檔
3.資料庫存儲(SQLite3)
4.蘋果公司提供的持久性工具Core
Data。
其實儲存的形式無非就這么幾種,而我們還必須要關心的是,這些文件會被放置在那個文件下,然後如何讀取。
也就是說:IOS上數據存儲,我們要了解的兩點,數據存儲格式(也就是存儲機制),數據存儲位置。
1》文件如何存儲(如上面4點)
2》文件存儲在哪裡。
對於數據的操作,其實我們關心的是操作的速率。
就好比在Adnroid中偏好存儲,資料庫存儲,io存儲一樣。
『捌』 怎樣實現IOS開發中的數據存儲方式
iOS 開發中一般有如下幾種數據存儲方式,需要根據具體的業務場景,選擇合適的數據存儲方式。
用戶默認設置 – 這種情況通常不需要用戶干預,如游戲通關信息,Video播放記錄,退出之後下次進入時恢復到退出時的情況。
設置束提供了一個通過 iPhone、iPad的設置應用程序進行配置的介面。
直接訪問文件系統讀寫屬於當前App的iOS文件系統部分的文件。
SQLite 資料庫是嵌入式的和輕量級的SQL資料庫,SQLite 是由C實現的。
遠端資料庫這個一般由App調用遠端的RESTFulWCF服務,將JSON、XML 數據傳遞給遠端的 Web 服務,讀寫資料庫的邏輯完全在 Web 服 務端實現。
『玖』 IOS開發數據存儲有哪幾種方式
簡單的數據,對安全性要求不高的數據可以使用 NSUserDefaults (本質上是一個plist)來存儲
相對復雜點的數據,可以使用coredata (本質上是使用sqlite 來存儲)
對安全性要求較高的數據,可以使用keychain 來存儲。
『拾』 iOS開發小技巧--userdefault存儲復雜數據(image為例)
一、 首先簡述一下 Userdefault (介紹使用了該作者的文章)
1.適合存儲輕量級的本地數據。
比如用戶id 用戶的登錄token什麼的 這種比較短小的數據
2.NSUserDefaults支持的數據格式有:NSNumber、NSData、NSDate、NSString、NSArray、NSDictionary、BOOL。
3.以鍵值對的形式進行存儲。
4.存儲時間為整體應用程序的存儲時間,如果想需要刪除,需要刪除整體應用程序。
⚠️ 存儲聲明的時候因為是動態的,先聲明再調用,聲明存儲的時候不會出現異常提示,但執行的時候會出現 --斷言--(因為存儲對象在這里編譯是nil)