iOS 本地資料 訪問 詳解

2021-07-11 18:27:54 字數 4483 閱讀 4726

應用沙盒目錄的常見獲取方式

tmp:nsstring *tmp = nstemporarydirectory();

library/caches:(跟documents類似的2種方法)

library/preference:通過nsuserdefaults類訪問該目錄下的設定資訊

xml屬性列表(plist)歸檔

preference(偏好設定)

nskeyedarchiver歸檔(nscoding)

sqlite3

core data

屬性列表-nsdictionary的儲存和讀取過程

屬性列表-nsdictionary的儲存和讀取過程

很多ios應用都支援偏好設定,比如儲存使用者名稱、密碼、字型大小等設定,ios提供了一套標準的解決方案來為應用加入偏好設定功能

每個應用都有個nsuserdefaults例項,通過它來訪問偏好設定

比如,儲存使用者名稱、字型大小、是否自動登入

儲存檔案內容

歸檔乙個nsarray物件到documents/array.archive

nsarray *array = [nsarray arraywithobjects:@」a」,@」b」,nil];

[nskeyedarchiver archiverootobject:array tofile:path];

nsarray *array = [nskeyedunarchiver unarchiveobjectwithfile:path];
訪問過程

歸檔person物件

@inte***ce person : nsobject@property (nonatomic, copy) nsstring *name;

@property (nonatomic, assign) int age;

@property (nonatomic, assign) float height;

@end

@implementation person

- (void)encodewithcoder:(nscoder *)encoder

- (id)initwithcoder:(nscoder *)decoder

@end

person *person = [[[person alloc] init] autorelease];

person.name = @"hosea";

person.age = 22;

person.height = 1.83f;

[nskeyedarchiver archiverootobject:person tofile:path];

person *person = [nskeyedunarchiver unarchiveobjectwithfile:path];
nskeyedarchiver-歸檔物件的注意
- 如果父類也遵守了nscoding協議,請注意:

- 應該在encodewithcoder:方法中加上一句

[super encodewithcode:encode];

確保繼承的例項變數也能被編碼,即也能被歸檔

- 應該在initwithcoder:方法中加上一句

self = [super initwithcoder:decoder];

確保繼承的例項變數也能被解碼,即也能被恢復

歸檔nsdata

利用歸檔實現深複製

// 臨時儲存person1的資料

nsdata *data = [nskeyedarchiver archiveddatawithrootobject:person1];

// 解析data,生成乙個新的person物件

person *person2 = [nskeyedunarchiver unarchiveobjectwithdata:data];

// 分別列印記憶體位址

深複製原理

sqlite3簡介

關閉資料庫:sqlite3_close(db);

執行創表語句

char *errormsg;  // 用來儲存錯誤資訊

char *sql = "create table if not exists t_person(id integer primary key autoincrement, name text, age integer);";

int result = sqlite3_exec(db, sql, null, null, &errormsg);

**解析:

帶佔位符插入資料

char *sql = "insert into t_person(name, age) values(?, ?);";

sqlite3_stmt *stmt;

if (sqlite3_prepare_v2(db, sql, -1, &stmt, null) == sqlite_ok)

if (sqlite3_step(stmt) != sqlite_done)

sqlite3_finalize(stmt);

查詢資料

char *sql = "select id,name,age from t_person;";

sqlite3_stmt *stmt;

if (sqlite3_prepare_v2(db, sql, -1, &stmt, null) == sqlite_ok)

}sqlite3_finalize(stmt);

core data簡單介紹

模型檔案

從應用程式包中載入模型檔案

nsmanagedobjectmodel *model = [nsmanagedobjectmodel mergedmodelfrombundles:nil];
nspersistentstorecoordinator *psc = [[[nspersistentstorecoordinator alloc] initwithmanagedobjectmodel:model] autorelease];
nsstring *docs = [nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes) lastobject];
新增資料

查詢資料

建立nsmanagedobject的子類

person *person = [nsentitydescription insertnewobjectforentityforname:@"person" inmanagedobjectcontext:context];

person.name = @"hosea";

person.age = [nsnumber numberwithint:22];

card *card = [nsentitydescription insertnewobjectforentityforname:@」card" inmanagedobjectcontext:context];

card.no = @」4414245465656";

person.card = card;

原文url:

IOS本地資料訪問

nsuserdomainmask 代表從使用者資料夾下找 yes 代表展開路徑中的波浪字元 nsarray array nssearchpathfordirectoriesindomains nsdocumentdirectory,nsuserdomainmask,yes 在ios中,只有乙個目錄跟...

iOS本地資料訪問,看這裡就夠了

應用沙盒目錄的常見獲取方式 tmp nsstring tmp nstemporarydirectory library caches 跟documents類似的2種方法 library preference 通過nsuserdefaults類訪問該目錄下的設定資訊 xml屬性列表 plist 歸檔 ...

iOS 關聯屬性訪問資料

有時候我們需要在現有的類存放一些額外的資訊,通常的做法是繼承乙個子類,然後定義新增加的屬性,然而如果我們為每個需要的類都新增乙個類顯得太麻煩了,objc提供了乙個關聯屬性的特性,可以給乙個物件關聯乙個屬性 做過.net的朋友一定熟悉附加屬性,objc的關聯屬性與.net的附加屬性有點類似類似 使用關...