應用沙盒目錄的常見獲取方式
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的附加屬性有點類似類似 使用關...