0

我在本地存储中为包含 NSString 列表的 NSMutableArray 保留数据时遇到问题。当应用程序运行时,我有一个保存方法和一个获取方法似乎都可以工作。但是,一旦我关闭应用程序并重新启动,数组中的项目就消失了。

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];
4

4 回答 4

1

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

不相关:(约定说 methodNames 应始终以小写字母开头)。

于 2013-01-15T08:55:37.800 回答
1
[[NSUserDefaults standardUserDefaults] synchronize]

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

于 2013-01-15T08:56:41.253 回答
1

您不能将可变数组存储到用户默认值。存储不可变副本并检索它并转换为可变副本以在下次启动期间访问。

于 2013-01-15T08:57:22.543 回答
0

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

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

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

}
于 2013-01-15T09:41:52.943 回答