中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

IOS如何實現NSUserDefaults讀取和寫入自定義對象

發布時間:2021-07-08 14:32:57 來源:億速云 閱讀:129 作者:小新 欄目:移動開發

小編給大家分享一下IOS如何實現NSUserDefaults讀取和寫入自定義對象,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

IOS 中NSUserDefaults讀取和寫入自定義對象的實現方法

NSUserDefaults可以存取一些短小的信息。

比如存入再讀出一個字符串到NSUserDefaults:

NSString *string = [NSString stringWithString @"hahaha"]; 
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; 
[ud setObject:string forKey:@"myKey"]; 
NSString *value; 
value = [ud objectForKey:"myKey"];

但是并不是所有的東西都能往里放的。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中進行讀取。

粘代碼:

假設有這樣一個簡單的類對象

@interface BusinessCard : NSObject <NSCoding>{ 
  NSString *_firstName; 
  NSString *_lastName; 
} 
@property (nonatomic, retain) NSString *_firstName; 
@property (nonatomic, retain) NSString *_lastName; 
@end; 
 
@implementation BusinessCard 
@synthesize _firstName, _lastName; 
- (void)dealloc{ 
  [_firstName release]; 
  [_lastName release]; 
  [super dealloc]; 
} 
- (id) initWithCoder: (NSCoder *)coder 
{ 
  if (self = [super init]) 
  { 
    self._firstName = [coder decodeObjectForKey:@"_firstName"]; 
    self._lastName = [coder decodeObjectForKey:@"_lastName"]; 
  } 
  return self; 
} 
- (void) encodeWithCoder: (NSCoder *)coder 
{ 
  [coder encodeObject:_firstName forKey:@"_firstName"]; 
  [coder encodeObject:_lastName forKey:@"_lastName"]; 
   
} 
 
@end

然后再存取時通過NSData做載體:

BusinessCard *bc = [[BusinessCard alloc] init]; 
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; 
NSData *udObject = [NSKeyedArchiver archivedDataWithRootObject:bc]; 
[ud setObject:udObject forKey:@"myBusinessCard"]; 
[bc release]; 
udObject = nil; 
udObject = [ud objectForKey:@"myBusinessCard"]; 
bc = [NSKeyedUnarchiver unarchiveObjectWithData:udObject] ;

以上的代碼時由另一個程序中截取的,沒有測試過,但意思就是這樣了。

如果一個自定義類中由另一個自定義類對象,那么所有嵌套的類都要實現<NSCoding>。

以上是“IOS如何實現NSUserDefaults讀取和寫入自定義對象”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

民丰县| 怀来县| 喀什市| 沙田区| 临汾市| 筠连县| 中江县| 莆田市| 苗栗市| 奉新县| 四平市| 隆回县| 乌恰县| 铁岭县| 凤凰县| 施秉县| 波密县| 金昌市| 临沭县| 建水县| 鲁甸县| 弥渡县| 始兴县| 伊川县| 巴彦县| 乳源| 丽江市| 曲沃县| 安达市| 南和县| 平度市| 寻乌县| 大城县| 玉溪市| 扬州市| 甘谷县| 光泽县| 温宿县| 宁化县| 重庆市| 开原市|