使用NSUserDefault儲存物件模型
NSUserDefault可以用來儲存一些系統的物件。
NSUserDefaults只支援: NSString, NSNumber, NSDate, NSArray, NSDictionary.
如果要儲存自定義的物件模型要怎麼辦呢?
我們把一個自定義的類存到一個NSArray裡,然後再存到NSUserDefaults裡也是不能成功的。
解決方法是實現<NSCoding>協議,讓這個自定義類實現協議中的 - (id) initWithCoder: (NSCoder *)coder 和 - (void) encodeWithCoder: (NSCoder *)coder 這兩個方法(obj-c的協議protocol就是java的介面interface,就是C++的純虛擬函式),然後把該自定義的類物件編碼到NSData中,再從NSUserDefaults中進行讀取。
儲存:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//不能直接存取NSObject,需要先歸檔轉成NSData
NSData * data = [NSKeyedArchiver archivedDataWithRootObject:_User];
[defaults setObject:data forKey:KEY_User];
[defaults synchronize];
讀取:
// 讀取使用者資料
NSData * data = [[NSUserDefaults standardUserDefaults] objectForKey:KEY_User];
// 解檔
_User = [NSKeyedUnarchiver unarchiveObjectWithData:data];
實現協議的兩個方法:
// 實現NSCoding協議
- (id) initWithCoder: (NSCoder *)coder
{
if (self = [super init])
{
self.userAccount = [coder decodeObjectForKey:@"userAccount"];
self.userPassword = [coder decodeObjectForKey:@"userPassword"];
self.userName = [coder decodeObjectForKey:@"userName"];
self.userIntroduce = [coder decodeObjectForKey:@"userIntroduce"];
}
return self;
}
- (void) encodeWithCoder: (NSCoder *)coder
{
[coder encodeObject:_userAccount forKey:@"userAccount"];
[coder encodeObject:_userPassword forKey:@"userPassword"];
[coder encodeObject:_userName forKey:@"userName"];
[coder encodeObject:_userIntroduce forKey:@"userIntroduce"];
}
最後介紹一個字典模型互轉框架 MJExtension
用法可參考:https://my.oschina.net/wolx/blog/396925
github地址:github.com/CoderMJLee/MJExtension
相關文章
- NSUserDefault 儲存自定義物件物件
- DAOS 分散式非同步物件儲存|儲存模型分散式非同步物件模型
- 高效能Sqlite儲存模型物件解密SQLite模型物件解密
- DAOS 分散式非同步物件儲存|故障模型分散式非同步物件模型
- DAOS 分散式非同步物件儲存|安全模型分散式非同步物件模型
- Go 中使用 memcache 儲存物件Go物件
- 塊儲存 檔案儲存 物件儲存物件
- 儲存—物件儲存_Minio物件
- 物件儲存物件
- DAOS 分散式非同步物件儲存|事務模型分散式非同步物件模型
- Laravel 使用騰訊雲 cos 儲存物件Laravel物件
- 快速使用七牛雲物件儲存物件
- WordPress如何使用騰訊雲物件儲存COS儲存媒體庫附件物件
- Laravel 使用阿里雲 oss 儲存物件Laravel阿里物件
- 物件儲存,未來儲存新潮流物件
- 使用儲存過程(PL/SQL)向資料庫中儲存BLOB物件儲存過程SQL資料庫物件
- 物件儲存 vs 檔案儲存 vs 塊儲存,選哪個?物件
- 使用MinIO搭建物件儲存服務物件
- 手把手教你使用 QingStor 物件儲存物件
- 分散式儲存ceph 物件儲存配置zone同步分散式物件
- minio-物件儲存物件
- 七牛雲物件儲存物件
- 什麼是物件儲存?物件
- swift 物件儲存地址分析Swift物件
- 如何將AI/ML與物件儲存結合使用AI物件
- 使用 .NET 整合 MinIO 實現高效物件儲存物件
- 物件儲存的優勢有哪些?為什麼要選擇物件儲存?物件
- 杉巖:淺談物件儲存和塊儲存區別物件
- 摩杜雲:物件儲存可以透過哪些方式使用?物件
- Django整合騰訊COS物件儲存Django物件
- spacy儲存和載入模型模型
- 資料中心儲存 TCO 模型模型
- 掌握Hive資料儲存模型Hive模型
- 從兩個模型帶你瞭解DAOS 分散式非同步物件儲存模型分散式非同步物件
- CEPH分散式儲存搭建(物件、塊、檔案三大儲存)分散式物件
- Go操作騰訊雲COS物件儲存的簡單使用案例Go物件
- 物件儲存、檔案儲存、塊儲存這三者之間有什麼區別?物件
- java物件頭的兩種儲存Java物件