iOS數(shù)據(jù)持久化

/** NSUserDefaults */
    //  NSData届案、NSString、NSNumber罢艾、NSDate楣颠、NSArray、NSDictionar
    
    static NSString* const key = @"key";
    
    [[NSUserDefaults standardUserDefaults] setValue:@"key123" forKey:key];
    [[NSUserDefaults standardUserDefaults] setValue:@"" forKey:@"key2"];
    [[NSUserDefaults standardUserDefaults] setValue:@2 forKey:@"key3"];
    [[NSUserDefaults standardUserDefaults] setObject:@"" forKey:@"key4"];
    [[NSUserDefaults standardUserDefaults] setObject:nil forKey:@"key5"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    
    NSString *string = [[NSUserDefaults standardUserDefaults] valueForKey:key];
    NSString *string2 = [[NSUserDefaults standardUserDefaults] valueForKey:@"key2"];
    NSNumber *number3 = [[NSUserDefaults standardUserDefaults] valueForKey:@"key3"];
    NSString *string4 = [[NSUserDefaults standardUserDefaults] objectForKey:@"key4"];
    NSString *string5 = [[NSUserDefaults standardUserDefaults] objectForKey:@"key5"];
/** 屬性列表plist */
 //序列化對象(serialized object):指可以被轉(zhuǎn)換為字節(jié)流以便于存儲(chǔ)到文件中或通過網(wǎng)絡(luò)進(jìn)行傳輸?shù)膶ο?    /*
     可以被序列化的類型只有如下幾種:
     NSArray
     NSMutableArray
     NSDictionary
     NSMutableDictionary
     NSData
     NSMutableData
     NSString
     NSMutableString
     NSNumber
     NSDate
     */
    // 路徑
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentDirectory = paths.firstObject;
    NSString *path = [documentDirectory stringByAppendingPathComponent:@"data.plist"];
    
    // 桌面路徑
    NSString *desktopPath = @"/Users/xp/Desktop";
    desktopPath = [desktopPath stringByAppendingPathComponent:@"data1.plist"];
    
    // 存儲(chǔ)
    NSArray *array = @[@1,@2,@3,@4];
    [array writeToFile:desktopPath atomically:YES];
    
    // 讀取
    if ([[NSFileManager defaultManager]fileExistsAtPath:desktopPath]) {
        // 確認(rèn)路徑存在
        NSArray* arr = [[NSArray alloc]initWithContentsOfFile:desktopPath];
        NSLog(@"arr: %@",arr);
    }


/** NSKeyedArchiver 對象歸檔 */
    // 在Cocoa中咐蚯,Archiver是另一種形式的序列化童漩,是任何對象都可實(shí)現(xiàn)的更常規(guī)的類型
    // 只有遵守了NSCoding或 NSSecureCoding(更為安全的歸檔協(xié)議)協(xié)議,并且實(shí)現(xiàn)了協(xié)議里歸檔與解歸檔的方法的的類創(chuàng)建的對象才能夠進(jìn)行歸檔
    // 最好也實(shí)現(xiàn)以下NSCopying,NSCopying與NSCoding一起實(shí)現(xiàn)好處在于允許復(fù)制對象春锋,使用數(shù)據(jù)模型對象時(shí)有較大的靈活性
    // 桌面路徑
    NSString *desktopPath = @"/Users/xp/Desktop";
    desktopPath = [desktopPath stringByAppendingPathComponent:@"data1.plist"];
    
    // 存儲(chǔ)
    FourLines *lines = [[FourLines alloc] init];
    lines.lines = @[@1,@3,@5,@10];
    NSMutableData *data = [[NSMutableData alloc] init];
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
    [archiver encodeObject:lines forKey:@"kRootKey"];
    [archiver finishEncoding];
    
    [data writeToFile:desktopPath atomically:YES];
    
    // 讀取
    if ([[NSFileManager defaultManager]fileExistsAtPath:desktopPath]) {
        NSData *data = [[NSMutableData alloc]initWithContentsOfFile:desktopPath];
        NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];
        FourLines *four = [unarchiver decodeObjectForKey:@"kRootKey"];
        [unarchiver finishDecoding];
        for (int i = 0; i < 4; i++) {
            //to do
        }
    }

// 協(xié)議實(shí)現(xiàn)
#pragma mark - NSCoding
- (void)encodeWithCoder:(NSCoder *)aCoder {
    [aCoder encodeObject:self.lines forKey:klinesKey];
}

- (instancetype)initWithCoder:(NSCoder *)aDecoder {
    self = [super init];
    if (self) {
        _lines = [aDecoder decodeObjectForKey:klinesKey];
    }
    return self;
}

#pragma mark - NSCopying
- (id)copyWithZone:(NSZone *)zone {
    FourLines *copy = [[[self class] allocWithZone:zone] init];
    NSMutableArray *linsCopy = [NSMutableArray array];
    for (id line in self.lines) {
        [linsCopy addObject:[line copyWithZone:zone]];
    }
    copy.lines = linsCopy;
    return copy;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末矫膨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子期奔,更是在濱河造成了極大的恐慌侧馅,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呐萌,死亡現(xiàn)場離奇詭異馁痴,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)搁胆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門弥搞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人渠旁,你說我怎么就攤上這事攀例。” “怎么了顾腊?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵粤铭,是天一觀的道長。 經(jīng)常有香客問我杂靶,道長梆惯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任吗垮,我火速辦了婚禮垛吗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘烁登。我一直安慰自己怯屉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布饵沧。 她就那樣靜靜地躺著锨络,像睡著了一般。 火紅的嫁衣襯著肌膚如雪狼牺。 梳的紋絲不亂的頭發(fā)上羡儿,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天,我揣著相機(jī)與錄音是钥,去河邊找鬼掠归。 笑死,一個(gè)胖子當(dāng)著我的面吹牛咏瑟,可吹牛的內(nèi)容都是我干的拂到。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼码泞,長吁一口氣:“原來是場噩夢啊……” “哼兄旬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起余寥,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤领铐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后宋舷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绪撵,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年祝蝠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了音诈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片幻碱。...
    茶點(diǎn)故事閱讀 40,115評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖细溅,靈堂內(nèi)的尸體忽然破棺而出褥傍,到底是詐尸還是另有隱情,我是刑警寧澤喇聊,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布恍风,位于F島的核電站,受9級特大地震影響誓篱,放射性物質(zhì)發(fā)生泄漏朋贬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一窜骄、第九天 我趴在偏房一處隱蔽的房頂上張望锦募。 院中可真熱鬧,春花似錦邻遏、人聲如沸御滩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽削解。三九已至,卻和暖如春沟娱,著一層夾襖步出監(jiān)牢的瞬間氛驮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工济似, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留矫废,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓砰蠢,卻偏偏與公主長得像蓖扑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子台舱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容