[英]NSUserDefaults flushes data before I retrieve
我正在使用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);
它给我“ shopsLocations:()”表示0值。 另外,当我尝试检索“ appDetail”时,它还会提供零个键和值。
我的问题是1.我可以在NSUserDefaults中保存数组和字典吗? 2.何时刷新NSUserDefaults中的数据? 3.如何从NSUserDefaults检索数据?
提前致谢。
您的stores
数组的内容是什么?
如果要保存到NSUserDefaults(使用setObject:forKey:
:),则唯一允许的内容是可以转换为属性列表的对象。 这些对象是NSArray
, NSDictionary
, NSString
, NSData
, NSDate
和NSNumber
(int,float,bool)。
如果要将其他内容保存到NSUserDefaults
,则必须首先创建一个NSData对象。 您可以在NSKeyedArchiver
的帮助下执行此操作。
是的。您可以在NSUserDefaults中保存数组和字典。
arrayForKey
和dictionaryForKey
是吸气剂。 使用setObject设置数组。
要不使用NSUserDefaults刷新数据,
[nsdefaults setObject:colorString forKey:KColorTheme];
[nsdefaults synchronize];
更新 :
要检索,
shopsLocations = [[NSArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] arrayForKey:KColorTheme]];
尝试更换
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];
}
让我知道是否可行。
您不能在NSUserDefaults中直接存储数组。 而是将数组归档到类似NSData的结构中,然后将其存储在NSUserDefaults中。
例如
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];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.