繁体   English   中英

NSUserDefaults在检索之前先刷新数据

[英]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: :),则唯一允许的内容是可以转换为属性列表的对象。 这些对象是NSArrayNSDictionaryNSStringNSDataNSDateNSNumber (int,float,bool)。

如果要将其他内容保存到NSUserDefaults ,则必须首先创建一个NSData对象。 您可以在NSKeyedArchiver的帮助下执行此操作。

是的。您可以在NSUserDefaults中保存数组和字典。

arrayForKeydictionaryForKey是吸气剂。 使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM