NSUserDefaults不起作用

时间:2013-09-08 09:41:55

标签: ios nsmutablearray save

我是编程新手,我有一个问题。我用两个视图创建应用程序。首先是tableviewcontroller,第二个是视图控制器。从第二个视图我通过perepareForSegue方法将数据发送到我的tableview。我的数据(字符串)是NSMutableArray和我想在appDelegate.m中的appEnterBackgoung后保存到UsedDefault的MutableArray 然后我想加载它,但什么也没发生。我将我的代码放在appDelegate.m中的appDidBecomeActive中,我已经尝试在我的第一个视图viewDidLoad中编写它,但没有动作。在新应用启动后,我的MuttableArray仍为空。

这是我的代码:

- (void)applicationDidEnterBackground:(UIApplication *)application
{
NSUserDefaults*defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:self.flipsideView.zoznamFunkcii forKey:@"NSMutableArray"];
[defaults synchronize];
}

flipsideView是我的第一个View,而zoznamFunkcii是我的NSMuttable数组

这是我的加载方法:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
NSUserDefaults*defaults = [NSUserDefaults standardUserDefaults];
self.flipsideView.zoznamFunkcii = [NSMutableArray arrayWithArray:[defaults  objectForKey:@"NSMutableArray"]];
}

任何人都可以帮助我吗?我不知道为什么它不起作用。

2 个答案:

答案 0 :(得分:0)

您正在将NSMutableArray保存到NSUserDefaults。所以加载的数组当然也是空的。

以下是包含评论的保存代码:

// overwrite zoznamFunkcii with empty array
self.flipsideView.zoznamFunkcii = [[NSMutableArray alloc]init];

NSUserDefaults*defaults = [NSUserDefaults standardUserDefaults];

// save this empty array to nsuserdefaults
[defaults setObject:self.flipsideView.zoznamFunkcii forKey:@"NSMutableArray"];

您的保存代码应该如下所示:

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    NSUserDefaults*defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:self.flipsideView.zoznamFunkcii forKey:@"NSMutableArray"];
}

因为NSUserDefault没有保存可变对象,所以恢复代码应如下所示:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    NSUserDefaults*defaults = [NSUserDefaults standardUserDefaults];
    self.flipsideView.zoznamFunkcii = [NSMutableArray arrayWithArray:[defaults objectForKey:@"NSMutableArray"]];
}

如果数组中的对象不是NSDataNSStringNSNumberNSDateNSArrayNSDictionary的实例你必须先编码你的数组。有关如何执行此操作的详细信息,请参阅this question

答案 1 :(得分:0)

Here you can Save Object With NSUserDefault..

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

and you make coder and decoder method

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

     }
    return self;
}

- (void)encodeWithCoder:(NSCoder *)encoder {
    [encoder encodeObject:self.toolResult forKey:@"obj1"];
    [encoder encodeObject:self.toolNotes forKey:@"obj2"];

}

your Data Save Into NsuserDefault When you Get Data From NsUserDefault then you Use like
[NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:@"NSMutableArray"]];