繁体   English   中英

无法从NSUserDefaults检索NSMutableArray

[英]Unable to retrieve NSMutableArray from NSUserDefaults

我在将包含NSStrings列表的NSMutableArray的数据持久保存在本地存储中时遇到问题。 应用运行时,我有一个save方法和一个get方法都可以正常工作。 但是,一旦我关闭应用程序并重新启动,数组中的项目就消失了。

NSMutableArray*ImageTags;

获取数据

-(NSMutableArray*)GetDataNSMutableArray:(NSString*)ItemName
{
    NSMutableArray *GetData = [[NSMutableArray alloc] init];
    NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
    NSData *dataRepresentingSavedArray = [currentDefaults objectForKey:ItemName];
    if (dataRepresentingSavedArray != nil)
    {
        NSArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray];
        if (oldSavedArray != nil)
            GetData = [[NSMutableArray alloc] initWithArray:oldSavedArray];
        else
            GetData = [[NSMutableArray alloc] init];
    }
    return GetData;
}

保存数据

-(void)SaveDataNSMutableArray:(NSString*)ItemName:(NSMutableArray*)Data
{
    [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:Data] forKey:ItemName];

}

如何添加项目

[ImageTags addObject:Control.titleLabel.text]

如何保存数组

[super SaveDataNSMutableArray:CVC_ImageURL:ImageTags];

如何检索数组

ImageTags = [super GetDataNSMutableArray:CVC_ImageURL];

NSUserDefaults总是返回不可变的实例。

无关:(Conventions表示methodNames应该始终以小​​写字母开头)。

[[NSUserDefaults standardUserDefaults] synchronize]

将所有内容从NSUserDefaults转储到持久性存储中

您不能将可变数组存储为用户默认值。 存储不可变的副本并进行检索,并转换为可变的副本以在下次启动时进行访问。

您可以在保存时进行同步:

-(void)SaveDataNSMutableArray:(NSString*)ItemName:(NSMutableArray*)Data
{
    [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:Data] forKey:ItemName];

[[NSUserDefaults standardUserDefaults] synchronize] //add this code of a line.

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM