引述
APP登錄后,首先返回的莫過于用戶的信息,通常情況下,我們會將這部分數據保存到本地,能夠在我們想用到用戶信息的地方很容易的就獲取到,而不用再通過接口獲取,這樣能夠使程序運行的更流暢。iOS開發中提供了幾種數據本地化的方式,每一種都有各自的優缺點,每個開發者也會根據自己的喜好,數據量的大小使用不同的數據本地化的方式。下面我羅列一些iOS開發經常用的數據本地化方式,然后再為各位讀友奉上我基于FMDB封裝的數據本地化工具。
???常用數據:本地化存儲方式:
- NSKeyedArchiver:
采用歸檔的形式來保存數據,該數據對象需要遵守NSCoding協議,并且該對象對應的類必須提供encodeWithCoder:和initWithCoder:方法。前一個方法告訴系統怎么對對象進行編碼,而后一個方法則是告訴系統怎么對對象進行解碼。
- NSUserDefaults:
用來保存應用程序設置和屬性、用戶保存的數據。用戶再次打開程序或開機后這些數據仍然存在。NSUserDefaults可以存儲的數據類型包括:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary。如果要存儲其他類型,則需要轉換為前面的類型,才能用NSUserDefaults存儲。
- Write寫入方式:永久保存在磁盤中。
具體方法為:
第一步:獲得文件即將保存的路徑
第二步:生成在該路徑下的文件
第三步:往文件中寫入數據
最后:從文件中讀出數據
- SQLite:采用SQLite數據庫來存儲數據。
SQLite作為一中小型數據庫,應用ios中,跟前三種保存方式相比,相對比較復雜一些。所以本文的重點【FMDB】也應運而生,FMDB是一種第三方的開源庫,FMDB就是對SQLite的API進行了封裝,加上了面向對象的思想,讓我們不必使用繁瑣的C語言API函數,比起直接操作SQLite更加方便。然而,使用FMDB依然需要些SQL語句,所以我基于FMDB做了封裝,簡化了數據庫的操作。
DWQDBManger:
由于本人之前做過一段時間的DBA,編寫過大量的存儲過程和SQL腳本,多表查詢,左連接,有連接,自然連接,笛卡爾積,游標,索引等等,所以能夠熟練編寫各類SQL語句。所以在本地化數據存儲中,我通常會用SQLite來做數據本地化。然而很多iOS開發者對SQL語句并不是很熟悉,所以會放棄使用這種方式。FMDB的出現,又讓一部分開發者選擇使用SQLite。最后,我對FMDB進行了封裝,極大簡化開發者對數據庫的操作,與多數FMDB封裝不同,本封裝是直接實體類對象來做增、刪、改、查。代碼中有比較詳細的注釋和講解,本封裝利用了runtime的機制,可以幫助初學者理解objective-c的黑魔法:runtime。
使用方法:
1.首先將DWQDBManger文件夾拖入工程中【注意:文件夾已經包含了FMDB】。
2.加入依賴庫libsqlite3.tbd
3.假如我們需要本地化的數據為用戶信息,那么首先創建UserInfo,繼承自DWQDBModel,如圖所示,然后聲明屬性,UserInfo就相當于【表名】,聲明的屬性就相當于【字段】。對應需要存儲的一些信息。
4.然后在PCH文件中,引入頭文件“UserInfo.h”
5.以登錄成功后返回用戶信息需要本地化為例子,實例化一個UserInfo對象
UserInfo *userInfo=[[UseInfo alloc] init];
然后給對象聲明的屬性進行賦值,最后調用save方法保存數據;示例代碼為:
NSDictionary * dict=responseObject[@"data"];
userInfo.create_time=dict[@"create_time"];
userInfo.id_card=dict[@"id_card"];
userInfo.is_partner=dict[@"is_partner"];
userInfo.member_avatar=dict[@"member_avatar"];
userInfo.member_id=dict[@"member_id"];
userInfo.member_name=dict[@"member_name"];
userInfo.member_status=dict[@"member_status"];
userInfo.partner_status=dict[@"partner_status"];
userInfo.password_is_null=dict[@"password_is_null"];
userInfo.spare_money=dict[@"spare_money"];
userInfo.sex=dict[@"sex"];
//插入到數據庫中需要調用的方法
[self.accountInfo save];
6.查詢-或者叫從數據庫中取數據。
a.每次登錄成功就會向表中插入一行數據,我們想獲取最新的數據,只能取最后一行數據,方法可以通過調用findAll返回的數組判斷個數,然后再通過主鍵查詢 + (instancetype)findByPK:(int)inPk;
b.其次還可以用每次插入表中數據之前清空一次表就可以了。然后調用 【userInfo findByPK:1】就可以獲取到用戶信息了。示例代碼如下
1.首先在每一次插入數據之前調用類方法清空數據的方法
[UserInfo clearTable]
2.然后再插入數據,上方第5步
3.最后在需要獲取數據的地方使用即可
UserInfo *user=[UserInfo findByPK:1];
NSString *mid= user.member_id
更多使用方法請詳細查看DWQDBModel.h文件,不再一一列舉。
GitHub 上Demo下載地址
GitHubDemo
記的在GItHub上個Star噢~~~~~~~!