iOS 如何归档一个Model数组
黄舟
黄舟 2017-04-17 15:52:37
[iOS讨论组]
    self.title = @"复杂对象归档";
    
    Person *personA = [[Person alloc] init];
    personA.name = @"张三";
    personA.age = 20;
    personA.sex = @"男";
    
    Person *personB = [[Person alloc] init];
    personB.name = @"李四";
    personB.age = 15;
    personB.sex = @"女";
    
    Person *personC = [[Person alloc] init];
    personC.name = @"王五";
    personC.age = 30;
    personC.sex = @"男";
    
    NSString *paths = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
    NSLog(@"Caches: %@", paths);
    
    NSMutableArray *personsArr = [NSMutableArray arrayWithObjects:personA, personB, personC, nil];
    NSString *personsArrPath = [paths stringByAppendingString:@"/personsArr.plist"];
    [personsArr writeToFile:personsArrPath atomically:YES];
    NSLog(@"%@", personsArrPath);

代码如上, 我想要归档一个Model数组, 应该如何编写?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(3)
迷茫

经过进一步学习, 复杂对象存入数组归档的方法如下:

- (void)complexObjectArchiver
{
    Person *personA = [[Person alloc] init];
    personA.name = @"张三";
    personA.age = 20;
    personA.sex = @"男";
    
    Person *personB = [[Person alloc] init];
    personB.name = @"李四";
    personB.age = 15;
    personB.sex = @"女";
    
    Person *personC = [[Person alloc] init];
    personC.name = @"王五";
    personC.age = 30;
    personC.sex = @"男";
    
    NSString *paths = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
    NSLog(@"Caches: %@", paths);
    
    NSMutableArray *personsArr = [NSMutableArray arrayWithObjects:personA, personB, personC, nil];
    NSString *personsArrPath = [paths stringByAppendingString:@"/personsArr.plist"];
    [NSKeyedArchiver archiveRootObject:personsArr toFile:personsArrPath];
    NSLog(@"personsArrPath: %@", personsArrPath);
    
    NSArray *newPersonsArr = [NSKeyedUnarchiver unarchiveObjectWithFile:personsArrPath];
    
    NSLog(@"反归档: %@", newPersonsArr);
    
    for (Person *tempPerson in newPersonsArr) {
        NSLog(@"name: %@, age: %ld, sex: %@", tempPerson.name, tempPerson.age, tempPerson.sex);
    }
}

即, 先将复杂对象存入数组, 再将数组按照复杂对象归档的方式写入本地; 反之亦然.

伊谢尔伦

最好的办法是实现归档
看这里吧

如果你懒得读 也没问题
在People中实现两个方法
第一个
-(NSDictionary*)getPeopleDict;
第二个
+(People)getPeopleByDict:(NSDictionary)dict;

方法太简单 你估计懂了
把对象转化为字典
放入数组 然后 arr.writeToFile 就好了
读出数组 调用第二个方法转成你的实例

怪我咯

推荐 EGOCache

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号