我是编程新手,我有一个问题。我用两个视图创建应用程序。首先是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"]];
}
任何人都可以帮助我吗?我不知道为什么它不起作用。
答案 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"]];
}
如果数组中的对象不是NSData
,NSString
,NSNumber
,NSDate
,NSArray
或NSDictionary
的实例你必须先编码你的数组。有关如何执行此操作的详细信息,请参阅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"]];