如何将阵列保存到NSUserDefaults?

时间:2010-08-02 16:19:10

标签: iphone objective-c cocoa-touch nsarray nsuserdefaults

我想在NSUserDefaults中保存一组视图控制器,但我不确定如何:

[[NSUserDefaults standardUserDefaults] setObject:tabBarController.viewControllers forKey:@"tabOrder"];

当我阅读上面一行时,我的tabBarController.viewControllers是空白的。

2 个答案:

答案 0 :(得分:2)

此数组中的视图控制器不可序列化,因此不会保存到NSUserDefaults

来自NSUserDefaults reference

  

value参数只能是属性列表对象:NSData,NSString,NSNumber,NSDate,NSArray或NSDictionary。对于NSArray和NSDictionary对象,其内容必须是属性列表对象。请参阅“属性列表编程指南”中的“什么是属性列表?”。

您应该在下次加载时重新初始化视图控制器。但是,您可以将他们的数据序列化为NSUserDefaults到一些自定义字段。

答案 1 :(得分:0)

你可以用NSUserDefault保存对象..

[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:self.flipsideView.zoznamFunkcii] forKey:@“NSMutableArray”];     [[NSUserDefaults standardUserDefaults] synchronize];

你制作编码器和解码器方法

  • (id)initWithCoder:(NSCoder *)decoder { if(self = [super init]){     self.toolResult = [decoder decodeObjectForKey:@“obj1”];     self.toolNotes = [decoder decodeObjectForKey:@“obj2”];

    } 回归自我; }

  • (void)encodeWithCoder:(NSCoder *)encoder { [编码器编码对象:self.toolResult forKey:@“obj1”]; [编码器编码对象:self.toolNotes forKey:@“obj2”];

}

当您从NsUserDefault获取数据时,您的数据保存到NsuserDefault中,然后使用like [NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:@“NSMutableArray”]];