【问题标题】:How to save array to NSUserDefaults?如何将数组保存到 NSUserDefaults?
【发布时间】:2010-08-02 16:19:09
【问题描述】:
我想在 NSUserDefaults 中保存一组视图控制器,但我不确定如何:
[[NSUserDefaults standardUserDefaults] setObject:tabBarController.viewControllers forKey:@"tabOrder"];
当我阅读以上行时,我的 tabBarController.viewControllers 是空白的。
【问题讨论】:
标签:
iphone
objective-c
cocoa-touch
nsarray
nsuserdefaults
【解决方案1】:
此数组中的视图控制器不可序列化,因此不会保存到NSUserDefaults。
来自NSUserDefaults reference:
value 参数只能是属性列表对象:NSData、NSString、NSNumber、NSDate、NSArray 或 NSDictionary。对于 NSArray 和 NSDictionary 对象,它们的内容必须是属性列表对象。请参阅“什么是属性列表?”在属性列表编程指南中。
您应该在下次加载时重新初始化视图控制器。但是,您可以将他们的数据序列化为 NSUserDefaults 到一些自定义字段。
【解决方案2】:
你可以使用 NSUserDefault 保存对象..
[[NSUserDefaults standardUserDefaults]setObject:[NSKeyedArchiver archivedDataWithRootObject:self.flipsideView.zoznamFunkcii] forKey:@"NSMutableArray"];
[[NSUserDefaults standardUserDefaults]同步];
你制作编码器和解码器方法
-
(id)initWithCoder:(NSCoder *)decoder {
if (self = [super init]) {
self.toolResult = [解码器 decodeObjectForKey:@"obj1"];
self.toolNotes = [解码器decodeObjectForKey:@"obj2"];
}
回归自我;
}
(void)encodeWithCoder:(NSCoder *)encoder {
[编码器 encodeObject:self.toolResult forKey:@"obj1"];
[encoder encodeObject:self.toolNotes forKey:@"obj2"];
}
您的数据保存到 NsuserDefault 当您从 NsUserDefault 获取数据时,您可以像这样使用
[NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:@"NSMutableArray"]];