保存的NSMutableArray NSUserDefaults的到(Saving NSMutabl

2019-10-19 02:01发布

我有一个NSMutableArray我的脑海中AppDelegate ,我正在试图将它保存到NSUserDefaults 。 该NSMutableArray (strainsfinal)包含收藏项目列表。 我想这个列表保存,即使应用程序被关闭,然后重新出现。 有谁知道为什么我的代码不工作(不保存我的数据)? 见下文:

AppDelegate.m

-(void)updateStrains:(NSDictionary *)item
{        
    NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
    NSData *dataSave = [currentDefaults objectForKey:@"strains"];
    if (strainsfinal != nil)
    {
        NSArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataSave];
        if (oldSavedArray != nil)
            strainsfinal = [[NSMutableArray alloc] initWithArray:oldSavedArray];
        else
            strainsfinal = [[NSMutableArray alloc] init];
    }

}

编辑:Appdelegate.m所以我改变了我上面的方法下面的方法(我认为它应该工作),但应用程序崩溃,他说:“终止应用程序由于未捕获的异常‘NSInvalidArguementException’,理由是:“NSConcreteAttributedString initwithString:零“值”。

我在想什么?

-(void)updateStrains:(NSDictionary *)item {

    NSData *dataSave = [NSKeyedArchiver archivedDataWithRootObject:strainsfinal];
        [[NSUserDefaults standardUserDefaults] setObject:dataSave forKey:@"strains"];
        NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
        [nc postNotificationName:@"arrayupdated" object:self userInfo:nil];
        NSLog(@"updated strains %@",strainsfinal);   
}

Answer 1:

您必须添加

[currentDefaults synchronize];

每次您保存的东西userDefaults后的时间;

但对于这种类型的数据是更好地使用的.plist文件。 检查文档获取更多信息。

编辑的代码:

-(void)updateStrains:(NSDictionary *)item {
    NSData *dataSave = [NSKeyedArchiver archivedDataWithRootObject:item[@"strainsfinal"]];
    [[NSUserDefaults standardUserDefaults] setObject:dataSave forKey:@"strains"];
   // NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
   // [nc postNotificationName:@"arrayupdated" object:self userInfo:nil];
    NSLog(@"updated strains %@",strainsfinal);   
    [[NSUserDefaults standardUserDefaults] synchronize]; // this will save you UserDefaults
}


Answer 2:

使用下面的方法:

NSUserDefaults *userDef = [NSUserDefaults standardUserDefaults];
[userDef setObject:array1 forKey:@"DataArra1"];
[userDef setObject:array2 forKey:@"DataArr2"];
[userDef synchronize];

要检索的信息:

NSUserDefaults *userDef = [NSUserDefaults standardUserDefaults];
NSArray *arrayText2 = [userDef objectForKey:@"DataArra1"];
NSArray *arrayText1 = [userDef objectForKey:@"DataArr2"];


Answer 3:

应归档NSArray保存之前。

[[NSUserDefaults standardUserDefaults] 
  setObject:[NSKeyedArchiver archivedDataWithRootObject:yourArray] 
     forKey:@"yourArray"];

从和解除封存时获得NSUserDefaults

NSData *data = [currentDefaults objectForKey:@"yourArray"];
if (data != nil)
{
    NSArray *savedArray = [NSKeyedUnarchiver unarchiveObjectWithData:data];
}


文章来源: Saving NSMutableArray to NSUserDefaults