首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在NSUserDefaults中保存NSMutablearray

如何在NSUserDefaults中保存NSMutablearray
EN

Stack Overflow用户
提问于 2013-10-28 20:08:57
回答 6查看 80.9K关注 0票数 63

我有两个NSMutableArray。它们由图像或文本组成。数组通过UITableView显示。当我关闭应用程序时,UITableView中的数据会丢失。如何使用NSUserDefaultUITableView中保存数组

EN

回答 6

Stack Overflow用户

发布于 2013-10-28 20:15:26

你可以这样保存你的可变数组:

代码语言:javascript
复制
[[NSUserDefaults standardUserDefaults] setObject:yourArray forKey:@"YourKey"];
[[NSUserDefaults standardUserDefaults] synchronize];

稍后,您将从用户默认设置中恢复可变数组。如果您想在以后编辑数组,获得可变副本是很重要的。

代码语言:javascript
复制
NSMutableArray *yourArray = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"YourKey"] mutableCopy];

然后,您只需通过UITableView委托从可变数组设置UITableview数据

希望这能有所帮助!

票数 46
EN

Stack Overflow用户

发布于 2013-10-28 21:18:32

我只想补充一下其他答案,你要存储在NSUserDefault中的对象,如苹果文档中所报道的,必须符合以下内容:

value参数只能是属性列表对象:NSDataNSStringNSNumber、NSDate、NSArray或NSDictionary。对于NSArray和NSDictionary对象,其内容必须是属性列表对象。

这里是到property list programming guide的链接

因此,请注意数组中的内容

票数 7
EN

Stack Overflow用户

发布于 2015-06-26 20:39:03

是否确实要将图像存储在属性列表中?您可以将图像保存到文件中,并将文件名存储为NSDictionary中的值。

定义存储文件的路径

代码语言:javascript
复制
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
self.basePath = [paths firstObject];

存储和加载镜像:

代码语言:javascript
复制
- (NSString *)imageWithKey:(NSString)key {
    NSString *fileName = [NSString stringWithFormat:@"%@.png", key]
    return [self.basePath stringByAppendingPathComponent:fileName];
}

- (void)saveImage:(UIImage *)image withKey:(NSString)key {
    NSData *imageData = UIImagePNGRepresentation(image);
    [imageData writeToFile:[self imageWithKey:key] atomically:YES];
}

- (UIImage *)loadImageWithKey:(NSString)key { {
    return [UIImage imageWithContentsOfFile:[self imageWithKey:key]];
}

您还可以将路径或索引存储在NSMutableDictionary

代码语言:javascript
复制
- (void)saveDictionary:(NSDictionary *)dictionary {
    NSMutableDictionary *dictForSave = [@{ } mutableCopy];
    for (NSString *key in [dictionary allKeys]) {
        [self saveImageWithKey:key];
        dictForSave[key] = @{ @"image" : key };
    }
    [[NSUserDefaults standardUserDefaults] setObject:dictForSave forKey:@"MyDict"];
}

- (NSMutableDictionary *)loadDictionary:(NSDictionary *)dictionary {
    NSDictionary *loadedDict = [[NSUserDefaults standardUserDefaults] objectForKey:@"MyDict"];
    NSMutableDictionary *result = [@{ } mutableCopy];
    for (NSString *key in [loadedDict allKeys]) {
        result[key] = [self imageWithKey:key];
    }
    return result;
}

NSUserDefaults中,你只能存储像NSStringNSDictionaryNSNumberNSArray这样的简单对象。

您还可以使用符合NSCoding协议的NSKeyedArchiver/NSKeyedUnarchiver来序列化对象。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19634426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档