无法从NSUserDefaults检索NSMutableArray

时间:2013-01-15 08:50:52

标签: iphone objective-c xcode nsmutablearray nsuserdefaults

我有一个问题是在本地存储中为包含NSStrings列表的NSMutableArray保存数据。 我有一个保存方法和一个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];

4 个答案:

答案 0 :(得分:1)

NSUserDefaults始终返回不可变实例。

无关: (约定说methodNames应该总是以小写字母开头)。

答案 1 :(得分:1)

[[NSUserDefaults standardUserDefaults] synchronize]

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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

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

}