iOS Model存儲

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface Student : NSObject <NSCopying>

@property (nonatomic, copy) NSString * name;
@property (nonatomic, copy) NSString * studentNumber;
@property (nonatomic, copy) NSString * sex;

@end

NS_ASSUME_NONNULL_END
#import "Student.h"

@implementation Student

- (void)encodeWithCoder:(NSCoder *)aCoder {
    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeObject:self.studentNumber forKey:@"studentNumber"];
    [aCoder encodeObject:self.sex forKey:@"sex"];
}

- (instancetype)initWithCoder:(NSCoder *)aDecoder {
    if (self = [super init]) {
        self.name = [aDecoder decodeObjectForKey:@"name"];
        self.studentNumber = [aDecoder decodeObjectForKey:@"studentNumber"];
        self.sex = [aDecoder decodeObjectForKey:@"sex"];
    }
    return self;
}


@end
#define studentKey @"studentKey"

- (void)test {
    Student * student = [[Student alloc] init];
     
    student.name = @"liuyifei";
    student.studentNumber = @"100111";
    student.sex = @"女";

    
    NSDictionary * dic = [self dicFromObject:student];
    Student * student2 = [[Student alloc] init];
    [student2 setValuesForKeysWithDictionary:dic];
    
    NSLog(@"88=%@---%@", dic, student2.name);
    
    NSData * data = [NSKeyedArchiver archivedDataWithRootObject:student];
    
    NSMutableArray * array = [NSMutableArray array];
    [array addObject:data];

    for (int i = 0; i < 100; i++) {
        Student * student = [[Student alloc] init];
        student.name = [NSString stringWithFormat:@"nancy%d", i];
        student.studentNumber = [NSString stringWithFormat:@"%d", i];
        student.sex = i % 2 == 0 ? @"男" : @"女";

        NSData * data = [NSKeyedArchiver archivedDataWithRootObject:student];
        [array addObject:data];
    }

    
    NSArray * dataArray = array.copy;
    
    [[NSUserDefaults standardUserDefaults] setObject:dataArray forKey:studentKey];
    [[NSUserDefaults standardUserDefaults] synchronize];
    
    NSArray * endArray = [[NSUserDefaults standardUserDefaults] objectForKey:studentKey];
    
    Student * stu = [NSKeyedUnarchiver unarchiveObjectWithData:endArray.firstObject];
    
    NSLog(@"99=%@--%@", endArray, stu.name);
}


//model轉(zhuǎn)化為字典
- (NSDictionary *)dicFromObject:(NSObject *)object {
    NSMutableDictionary *dic = [NSMutableDictionary dictionary];
    unsigned int count;
    objc_property_t *propertyList = class_copyPropertyList([object class], &count);
 
    for (int i = 0; i < count; i++) {
        objc_property_t property = propertyList[i];
        const char *cName = property_getName(property);
        NSString *name = [NSString stringWithUTF8String:cName];
        NSObject *value = [object valueForKey:name];//valueForKey返回的數(shù)字和字符串都是對象
 
        if ([value isKindOfClass:[NSString class]] || [value isKindOfClass:[NSNumber class]]) {
            //string , bool, int ,NSinteger
            [dic setObject:value forKey:name];
 
        } else if ([value isKindOfClass:[NSArray class]] || [value isKindOfClass:[NSDictionary class]]) {
            //字典或字典
            [dic setObject:[self arrayOrDicWithObject:(NSArray*)value] forKey:name];
 
        } else if (value == nil) {
            //null
            //[dic setObject:[NSNull null] forKey:name];//這行可以注釋掉?????
 
        } else {
            //model
            [dic setObject:[self dicFromObject:value] forKey:name];
        }
    }
 
    return [dic copy];
}

//將可能存在model數(shù)組轉(zhuǎn)化為普通數(shù)組
- (id)arrayOrDicWithObject:(id)origin {
    if ([origin isKindOfClass:[NSArray class]]) {
        //數(shù)組
        NSMutableArray *array = [NSMutableArray array];
        for (NSObject *object in origin) {
            if ([object isKindOfClass:[NSString class]] || [object isKindOfClass:[NSNumber class]]) {
                //string , bool, int ,NSinteger
                [array addObject:object];
 
            } else if ([object isKindOfClass:[NSArray class]] || [object isKindOfClass:[NSDictionary class]]) {
                //數(shù)組或字典
                [array addObject:[self arrayOrDicWithObject:(NSArray *)object]];
 
            } else {
                //model
                [array addObject:[self dicFromObject:object]];
            }
        }
 
        return [array copy];
 
    } else if ([origin isKindOfClass:[NSDictionary class]]) {
        //字典
        NSDictionary *originDic = (NSDictionary *)origin;
        NSMutableDictionary *dic = [NSMutableDictionary dictionary];
        for (NSString *key in originDic.allKeys) {
            id object = [originDic objectForKey:key];
 
            if ([object isKindOfClass:[NSString class]] || [object isKindOfClass:[NSNumber class]]) {
                //string , bool, int ,NSinteger
                [dic setObject:object forKey:key];
 
            } else if ([object isKindOfClass:[NSArray class]] || [object isKindOfClass:[NSDictionary class]]) {
                //數(shù)組或字典
                [dic setObject:[self arrayOrDicWithObject:object] forKey:key];
 
            } else {
                //model
                [dic setObject:[self dicFromObject:object] forKey:key];
            }
        }
 
        return [dic copy];
    }
 
    return [NSNull null];
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末稚失,一起剝皮案震驚了整個濱河市当编,隨后出現(xiàn)的幾起案子策吠,更是在濱河造成了極大的恐慌馍悟,老刑警劉巖甥雕,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盏道,死亡現(xiàn)場離奇詭異,居然都是意外死亡互艾,警方通過查閱死者的電腦和手機试和,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纫普,“玉大人阅悍,你說我怎么就攤上這事∽蚣冢” “怎么了节视?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長假栓。 經(jīng)常有香客問我寻行,道長,這世上最難降的妖魔是什么匾荆? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任拌蜘,我火速辦了婚禮,結(jié)果婚禮上棋凳,老公的妹妹穿的比我還像新娘拦坠。我一直安慰自己,他們只是感情好剩岳,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布贞滨。 她就那樣靜靜地躺著,像睡著了一般拍棕。 火紅的嫁衣襯著肌膚如雪晓铆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天绰播,我揣著相機與錄音骄噪,去河邊找鬼。 笑死蠢箩,一個胖子當著我的面吹牛链蕊,可吹牛的內(nèi)容都是我干的事甜。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼滔韵,長吁一口氣:“原來是場噩夢啊……” “哼逻谦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起陪蜻,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤邦马,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后宴卖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體滋将,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年症昏,在試婚紗的時候發(fā)現(xiàn)自己被綠了随闽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡齿兔,死狀恐怖橱脸,靈堂內(nèi)的尸體忽然破棺而出础米,到底是詐尸還是另有隱情分苇,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布屁桑,位于F島的核電站医寿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蘑斧。R本人自食惡果不足惜靖秩,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望竖瘾。 院中可真熱鬧沟突,春花似錦、人聲如沸捕传。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽庸论。三九已至职辅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間聂示,已是汗流浹背域携。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鱼喉,地道東北人秀鞭。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓趋观,卻偏偏與公主長得像,于是被迫代替她去往敵國和親锋边。 傳聞我的和親對象是個殘疾皇子拆内,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

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