gpt4 book ai didi

iphone - 使用正确的方法 integerForKey、objectForKey for NSUserDefaults 进行迭代,以备份到数据库?

转载 作者:行者123 更新时间:2023-11-29 04:52:35 24 4
gpt4 key购买 nike

我想将我的应用程序中使用的所有 NSUserDefaults 转储到 m 数据库。

为什么?因为,我正在创建备份/恢复功能,其中我只备份数据库文件。这样我就可以将所有设置保留在我的数据库中。我想我需要使用插入查询逐行执行此操作。

您可能会说,为什么不首先将值存储在数据库中,我们将需要做更多的工作并影响性能。这对我来说只是最后的选择。

我的问题是,如果通常当我保存到 NSUserDefaults 时,我会使用 setIntegersetObject 但我如何确定要使用什么在循环中使用。

我知道我可以像这样迭代......

NSUserDefaults * defs = [NSUserDefaults standardUserDefaults];
NSDictionary * dict = [defs dictionaryRepresentation];
for (id key in dict) {
[defs removeObjectForKey:key];
}
[defs synchronize];

我不想为我的每个 key 进行调用。

编辑

我发现了这个,我可以用它转储到数据库中的一条记录,但我不确定如何将其传回?

NSDictionary *bundleInfo = [[NSBundle mainBundle] infoDictionary];
NSString *bundleId = [bundleInfo objectForKey: @"CFBundleIdentifier"];

NSUserDefaults *appUserDefaults = [[NSUserDefaults alloc] init];
NSLog(@"Start dumping userDefaults for %@", bundleId);
NSLog(@"userDefaults dump: %@", [appUserDefaults persistentDomainForName:
bundleId]);
NSLog(@"Finished dumping userDefaults for %@", bundleId);
[appUserDefaults release];

最佳答案

正如您所描述的,您可以使用 -persistentDomainForName 使用应用的设置创建字典。然后你就有了一个简单的 NSDictionary

您可以通过将字典转换为属性列表的 XML 表示形式来创建字符串:

NSData *data = [NSPropertyListSerialization dataWithPropertyList: dict format: NSPropertyListXMLFormat_v1_0 options: 0 error: nil];
NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

您可以将其存储在数据库中。 (您也可以立即存储数据)

然后您可以使用 -propertyListWithData:options:format:error: 将其转换回 NSDictionary:

NSString *data = [string dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dict = [NSPropertyListSerialization propertyListWithData: data options: 0 format: NSPropertyListXMLFormat_v1_0 error: nil];

然后只需循环遍历该字典中的所有键并使用 -setObject:forKey 将这些元素写回用户默认值。

关于iphone - 使用正确的方法 integerForKey、objectForKey for NSUserDefaults 进行迭代,以备份到数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8572370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com