我有一个问题是在本地存储中为包含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];
答案 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.
}