我使用NSUserDefaults将NSMutableArray和NSMutableDictionery保存为
NSUserDefaults *nsdefaults = [NSUserDefaults standardUserDefaults];
NSMutableDictionary *appDetail = [[NSMutableDictionary alloc]initWithDictionary:[sbjasonObj objectWithString:result]];
if ([appDetail objectForKey:KStores]) {
NSArray *stores = [appDetail objectForKey:KStores];
NSLog(@"%@",stores);
[nsdefaults setObject:stores forKey:KStores];
}
NSString *colorString = [appDetail objectForKey:KColorTheme];
[nsdefaults setObject:colorString forKey:KColorTheme];
NSString *lookBookURL = [appDetail objectForKey:kLookBook];
NSLog(@"look_book%@",lookBookURL);
[nsdefaults setObject:lookBookURL forKey:kLookBook];
[nsdefaults setObject:appDetail forKey:kGetAppDetail];//using same key to save in sandbox
[nsdefaults synchronize];
[appDetail release];
并将此数据检索为
shopsLocations = [[NSArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults]
objectForKey:KStores]];
NSLog(@"shopsLocations: %@",shopsLocations);
它给了我“商店位置:( )“表示0值。当我尝试检索”appDetail“时,它也会给出零键和值。
我的问题是 1.我可以在NSUserDefaults中保存数组和字典吗? 2.当刷新NSUserDefaults中的数据时? 3.如何从NSUserDefaults中检索数据?
提前致谢。
答案 0 :(得分:4)
stores
数组的内容是什么?
如果要保存到NSUserDefaults(使用setObject:forKey:
),则唯一允许的内容是可以转换为属性列表的对象。这些对象是NSArray
,NSDictionary
,NSString
,NSData
,NSDate
和NSNumber
(int,float,bool)。
如果要将其他内容保存到NSUserDefaults
,则必须先创建NSData对象。您可以在NSKeyedArchiver
的帮助下完成此操作。
答案 1 :(得分:0)
是的。您可以在NSUserDefaults中保存数组和字典。
arrayForKey
和dictionaryForKey
是吸气剂。使用setObject设置数组。
要在NSUserDefaults使用中不刷新数据,
[nsdefaults setObject:colorString forKey:KColorTheme];
[nsdefaults synchronize];
已更新:
要检索,
shopsLocations = [[NSArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] arrayForKey:KColorTheme]];
答案 2 :(得分:0)
尝试替换
if ([appDetail objectForKey:KStores]) {
NSArray *stores = [appDetail objectForKey:KStores];
NSLog(@"%@",stores);
[nsdefaults setObject:stores forKey:KStores];
}
带
if ([appDetail objectForKey:KStores]) {
NSArray *stores=[[NSArray alloc] initWithArray:[appDetail objectForKey:KStores]];
NSLog(@"%@",stores);
[nsdefaults setObject:stores forKey:KStores];
[stores release];
}
让我知道它是否有效。
答案 3 :(得分:0)
您无法直接在NSUserDefaults中存储数组。而是将您的数组存档到NSData之类的结构,然后将其存储在NSUserDefaults中。
E.g。
if ([appDetail objectForKey:KStores]) {
NSArray *stores = [appDetail objectForKey:KStores];
NSLog(@"%@",stores);
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:stores];
[nsdefaults setObject:data forKey:KStores];
}
要检索数组,请执行相反的操作。即检索NSData,然后将其解压缩到数组
NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:KStores];
shopsLocations = [NSKeyedUnarchiver unarchiveObjectWithData:data];