OC基礎學習13:文件加載與保存

1 屬性列表(property list, plist)

屬性列表可以保存的類型有NSArray,NSDictionary,NSString,NSNumber,NSDate,NSDate以及它們對應的Mutable類。

  • NSDate
        NSDate *date = [NSDate date];
        NSLog(@"today is %@", date);
        NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow: -(24*3600)];
        NSLog(@"yesterday is %@", yesterday);

NSDateFormatter用來處理時間格式

  • NSData
        const *string = "Hi there, this is a C string!";
        NSData *data = [NSData dataWithBytes: string length: strlen(string)+1];
        NSLog(@"data is %@", data);
        // data is <48692074 68657265 2c207468 69732069 73206120 43207374 72696e67 2100>
        NSLog(@"%lu byte string is '%s'", [data length], [data bytes]);
        // 30 byte string is 'Hi there, this is a C string!'

  • 寫入和讀取屬性列表

寫入

        NSArray *phrase;
        phrase = [NSArray arrayWithObjects:@"I", @"seem", @"to", @"be", @"a", @"verb", nil];
        [phrase writeToFile:@"/tmp/verbiage.txt" atomically:YES];

verbiage.txt內(nèi)容為:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <string>I</string>
    <string>seem</string>
    <string>to</string>
    <string>be</string>
    <string>a</string>
    <string>verb</string>
</array>
</plist>

Mac電腦系統(tǒng)中 ~/Library/Preferences下的所有首選項文件和/System/Library/LaunchDaemons/下的系統(tǒng)配置文件都是plist

讀取

        NSArray *phrase2;
        phrase2 = [NSArray arrayWithContentsOfFile:@"/tmp/verbiage.txt"];
        NSLog(@"%@", phrase2);

-writeToFile:atomically:方法中的atomically表示是否首先將文件內(nèi)容保存在臨時文件中,再將臨時文件和原始文件交換奠旺。

  • 修改對象類型
    NSPropertyListSerialization

2 編碼對象

無法將對象信息表示為屬性列表類。
編碼和解碼(encoding and decoding) 和 序列化與反序列化(serialization and deserialization) 必須采用NSCoding協(xié)議
在Interface Builder中的的對象就被序列化保存到磁盤中了亮航。
NSCoding定義兩個方法咒唆,用于對象與NSDate之間的轉換:

@protocol NSCoding

- (void)encodeWithCoder:(NSCoder *)aCoder;
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder; // NS_DESIGNATED_INITIALIZER

@end

一個列子

@interface Thingie : NSObject <NSCoding>
{
    NSString *name;
    int magicNumber;
    float shoeSize;
    NSMutableArray *subThingies;
}

@property (copy) NSString *name;
@property int magicNumber;
@property float shoeSize;
@property (retain) NSMutableArray *subThingies;

- (id)initWithName: (NSString *) n
       magicNumber: (int) mn
          shoeSize: (float) ss;

@end // Thingie

Thingie采用了NSCoding協(xié)議,要實現(xiàn)編碼和解碼響應的方法聪全。

@implementation Thingie
@synthesize name;
@synthesize magicNumber;
@synthesize shoeSize;
@synthesize subThingies;

- (id)initWithName: (NSString *) n
       magicNumber: (int) mn
          shoeSize: (float) ss
{
    if (self = [super init])
    {
        self.name = n;
        self.magicNumber = mn;
        self.shoeSize = ss;
        self.subThingies = [NSMutableArray array];
    }
    
    return (self);
}

- (void) encodeWithCoder: (NSCoder *) coder
{
    [coder encodeObject: name
                 forKey: @"name"];
    [coder encodeInt: magicNumber
              forKey: @"magicNumber"];
    [coder encodeFloat: shoeSize
                forKey: @"shoeSize"];
    [coder encodeObject: subThingies
                 forKey: @"subThingies"];
    
} // encodeWithCoder


- (id) initWithCoder: (NSCoder *) decoder
{
    if (self = [super init])
    {
        self.name = [decoder decodeObjectForKey: @"name"];
        self.magicNumber = [decoder decodeIntForKey: @"magicNumber"];
        self.shoeSize = [decoder decodeFloatForKey: @"shoeSize"];
        self.subThingies = [decoder decodeObjectForKey: @"subThingies"];
    }
    
    return (self);
    
} // initWithCoder


- (NSString *) description
{
    NSString *description =
    [NSString stringWithFormat: @"%@: %d/%.1f %@",
     name, magicNumber, shoeSize, subThingies];
    
    return (description);
    
} // description


@end // Thingie
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市载佳,隨后出現(xiàn)的幾起案子炒事,更是在濱河造成了極大的恐慌,老刑警劉巖蔫慧,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挠乳,死亡現(xiàn)場離奇詭異,居然都是意外死亡藕漱,警方通過查閱死者的電腦和手機欲侮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肋联,“玉大人威蕉,你說我怎么就攤上這事¢先裕” “怎么了韧涨?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長侮繁。 經(jīng)常有香客問我虑粥,道長,這世上最難降的妖魔是什么宪哩? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任娩贷,我火速辦了婚禮,結果婚禮上锁孟,老公的妹妹穿的比我還像新娘彬祖。我一直安慰自己,他們只是感情好品抽,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布储笑。 她就那樣靜靜地躺著,像睡著了一般圆恤。 火紅的嫁衣襯著肌膚如雪突倍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天盆昙,我揣著相機與錄音羽历,去河邊找鬼。 笑死淡喜,一個胖子當著我的面吹牛窄陡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拆火,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了们镜?” 一聲冷哼從身側響起币叹,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎模狭,沒想到半個月后颈抚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡嚼鹉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年贩汉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锚赤。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡匹舞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出线脚,到底是詐尸還是另有隱情赐稽,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布浑侥,位于F島的核電站姊舵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏寓落。R本人自食惡果不足惜括丁,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伶选。 院中可真熱鬧史飞,春花似錦、人聲如沸考蕾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肖卧。三九已至蚯窥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間塞帐,已是汗流浹背拦赠。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留葵姥,地道東北人荷鼠。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像榔幸,于是被迫代替她去往敵國和親允乐。 傳聞我的和親對象是個殘疾皇子矮嫉,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

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