ios應用資料儲存的常用方式有
1.plist檔案。2 .preference(偏好設定)。 3.nskeyarchiver歸檔(nscoding)4.資料庫儲存(sqlite3 當有大量的資料需要儲存時使用)。
今天我們只講前面三中,資料庫後面在說。
講之前要先了解一下沙盒(sandbox),每個軟體都有自己的應用沙盒(應用沙盒就是應用的資料夾),與其它檔案系統隔離。應用必須待在自己的沙盒裡,
其它應用不能訪問該沙盒。應用沙盒的檔案系統目錄如下圖:
沙盒中各資料夾的作用
獲取沙盒路徑
nslog(@"
沙盒路徑==%
@",nshomedirectory
());
注意要和bundle路徑區分開,別搞混淆了
nslog
(@"bundlepath*****=%@"
,[nsbundle
mainbundle
].bundlepath
);bundle路徑應用程式的根路徑,比如獲取專案info.plist檔案,通過bundle路徑去拿。
獲取documents資料夾路徑
nsstring
*documentpath = [
nssearchpathfordirectoriesindomains
(nsdocumentdirectory
,nsuserdomainmask
,yes
)lastobject];
第乙個引數:目標檔案。第二個引數:作用域,第三個引數:是否展開~。
獲取caches資料夾路徑
nsstring
*cachespath = [
nssearchpathfordirectoriesindomains
(nscachesdirectory
,nsuserdomainmask
,yes
)lastobject];
獲取tmp資料夾路徑
nsstring
*temppath =
nstemporarydirectory
();
直接通過方法去獲取。
那先講第一種plist檔案儲存(主要儲存有writetofile方法的物件,比如nsarray
nsdictionary nsstring nsdata 物件);
nsstring
*documentpath = [
nssearchpathfordirectoriesindomains
(nsdocumentdirectory
,
nsuserdomainmask
,yes
)lastobject];
nsarray
*names = [
nsarray
arraywithobjects
:@"jack"
,@"rose"
,@"tom"];
nsstring
*file = [documentpath
:@"name.plist"];
//引數
2:是否允許原子型寫入
[names
writetofile
:file
atomically
:yes];
plist檔案的讀取
nsstring
*documentpath = [
nssearchpathfordirectoriesindomains
(nsdocumentdirectory
,nsuserdomainmask
,yes
) lastobject];
nsstring
*file = [documentpath
:@"name.plist"];
nsarray
*names = [
nsarray
arraywithcontentsoffile
:file];
偏好設定儲存(本質還是乙個plist檔案)
nsuserdefaults
*defaults = [
nsuserdefaults
standarduserdefaults];
[defaults
setbool
:yes
forkey
:@"isautologin"];
[defaults
setobject
:@"wululin"
forkey
:@"username"];
[defaults
setobject
:@"560560"
forkey
:@"password"];
[defaults
synchronize];
記得要呼叫
synchronize.
偏好設定讀取
nsuserdefaults
*defaults = [
nsuserdefaults
standarduserdefaults];
bool
isauto = [defaults
boolforkey
:@"isautologin"];
nsstring
*name = [defaults
objectforkey
:@"username"];
nsstring
*password = [defaults
objectforkey
:@"password"];
歸檔 物件要歸檔,首先要遵守nscoding協議,然後實現encodewithcoder方法,告訴系統哪些屬性需要歸檔。
建立乙個person類 遵守nscoding協議。
#import
@inte***ce
person :
nsobject
<
nscoding
>
@property
(nonatomic
,copy
)nsstring
*name;
@property
(nonatomic
,copy
)nsstring
*phone;
@end
實現encodewithcoder方法
@implementation
person //
歸檔告訴系統要儲存哪些屬性 -(
void
) encodewithcoder:(
nscoder
*)acoder
@end
用nskeyedarchiver
將物件寫入檔案
nsstring
*path = [
nssearchpathfordirectoriesindomains
(nsdocumentdirectory
, nsuserdomainmask
, yes
)lastobject];
nsstring
*filepath = [path
:@"person.plist"];
[nskeyedarchiver
archiverootobject
:person
tofile
:filepath];
反歸檔實現initwithcoder方法 //
反歸檔讀取物件的哪些屬性 -(
instancetype
) initwithcoder:(
nscoder
*)adecoder
return
self;
} 用nskeyedunarchiver
將檔案轉化成物件
nsstring
*path = [
nssearchpathfordirectoriesindomains
(nsdocumentdirectory
,nsuserdomainmask
, yes
)lastobject];
nsstring
*filepath = [path
:@"person.plist"];
[nskeyedarchiver
archiverootobject
:person
tofile
:filepath];
person
*p = [
nskeyedunarchiver
unarchiveobjectwithfile
:filepath];
iOS資料儲存
預設情況下,每個沙盒含有3個資料夾 documents,library和tmp.由於受沙盒機制的限制,應用只能在這幾個目錄下讀寫檔案 在itunes與iphone同步時,會備份所有的dcuments和library目錄,並且當iphone在重啟時,會丟棄所有的tmp檔案。documents 蘋果建議...
iOS 資料儲存
ios應用資料儲存常用方式 1 plist檔案儲存 2 nsuserdefault 設定儲存 3 sqlite3 4 core data plist檔案儲存是將nsstring,nsarray,nsdictionary,nsnumber等型別寫到檔案中 將字典寫入檔案中 nsdictionary p...
iOS 資料儲存
1 plsit屬性列表 1 適用物件 僅僅是foundation框架中自帶的一些類,比如 nsstring nsarray nsdicionary nsset nsnumber nsdata 2 呼叫物件的writetofile.方法就可以寫入檔案 3 呼叫物件的.withcontentsoffil...