1

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

这是我的代码:

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

FlipsideView 是我的第一个视图,而 zoznamFunkcii 是我的 NSMuttable 数组

这是我的加载方法:

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

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

4

2 回答 2

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"]];
}

如果数组中的对象不是 , , , , 的实例NSDataNSString或者NSNumberNSDate必须NSArrayNSDictionary对数组进行编码。有关如何执行此操作的详细信息,请参阅此问题。

于 2013-09-08T09:47:52.160 回答
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"]];
于 2014-05-01T12:42:52.617 回答