【问题标题】:How to store JSON response in string and then store that string locally ios objective c如何将JSON响应存储在字符串中,然后在本地存储该字符串
【发布时间】:2016-05-27 13:33:23
【问题描述】:

[在此处输入图像描述][1]我从 JSON 中得到三个值。 我如何将这三个值存储NSString 中并然后将这些字符串存储在本地,即设备上? 我试过NSUserDefaults,但我做不到。我已附上代码 sn-p。

NSData *JSONData = [NSJSONSerialization dataWithJSONObject:responseObject
                                                   options:0 // Pass 0 if you don't care about the readability of the generated string
                                                     error:&error];

if (! JSONData)
{
    NSLog(@"Got an error: %@", error);
} else {
    //_branchId = [responseObject valueForKey:@"branchId"];
    _branchName = [responseObject valueForKey:@"branchName"];
    _branchUri = [responseObject valueForKey:@"branchUri"];
    [[NSUserDefaults standardUserDefaults] setObject:_branchId forKey:[responseObject valueForKey:_branchId]];
    [[NSUserDefaults standardUserDefaults] setObject:_branchName forKey:@"branchName"];
    [[NSUserDefaults standardUserDefaults] setObject:_branchUriStore forKey:@"_branchUri"]; // Here the setobject value remains nil only
    [[NSUserDefaults standardUserDefaults] synchronize];

PS:我也想在我的公用程序中使用该存储值。该怎么做呢?

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"(__fetchBranchUri)/%@",url]]];

【问题讨论】:

  • 你能分享一下json吗?如果您愿意,我们可以提供更多帮助。
  • 您面临的问题是什么?什么没用?
  • 问题不在于您将对象保存到用户默认值的方式。我认为您在解析值时遇到问题。
  • @Murat 这是 json 响应 { branchId = 1;分支名称 = ShellCHN; branchUri = "192.168.1.145:8181/services";状态=成功; }

标签: ios objective-c json


【解决方案1】:

在 else 块中将内容替换为

[[NSUserDefaults standardUserDefaults] setObject:[responseObject valueForKey:@"branchId"] forKey:@"branchId"];
[[NSUserDefaults standardUserDefaults] setObject:[responseObject valueForKey:@"branchName"] forKey:@"branchName"];
[[NSUserDefaults standardUserDefaults] setObject:[responseObject valueForKey:@"branchUri"] forKey:@"_branchUri"]; 

[[NSUserDefaults standardUserDefaults] synchronize];

编辑:解释

在您上面的代码中,对象 _branchUriStore 没有定义,并且可能是您的问题的一部分(一个简单的错字?)。下面,我更新并压缩了您的代码,以消除您使用 branchId 的另一个问题,以便您可以从样式中认识到您尝试做的大部分事情都很好。

另请注意,@rmaddie 在下面的 cmets 中提供了其他改进。

【讨论】:

  • 使用objectForKey:,而不是valueForKey:,除非你对KVC有特殊需求。而且您无需致电synchronize
  • 除了将一些行组合在一起之外,这与问题中的代码有何不同?
  • 明显的逻辑有错误。注意这一行:
  • @rmaddy,明显的逻辑有错误。注意这一行: [[NSUserDefaults standardUserDefaults] setObject:_branchUriStore forKey:@"_branchUri"]; _branchUriStore 是什么?当然,NSUserdefaults 的每次更新都不需要“同步”。但是,这取决于我们不了解的整体应用程序逻辑。我刚刚修复了我看到的代码。也许有点太快了,以至于我错过了“关键价值”。我不认为我应该被否决。下次我会更详细。我认为这个景象比那个更精简。
  • 你应该把解释放在你的答案中。仅代码的答案并没有真正的帮助。一个好的答案解释了 OP 中的问题,一个好的答案解释了他们的答案如何解决问题。
【解决方案2】:

好的,这就是你应该做的。

1- 将您的 JSONData 转换为无 NSData

2-将你的 NSData 保存在 NSUserDefaults/

希望这会有所帮助!

【讨论】:

  • 我做到了。但我想将每个值存储在单独的字符串中,因为该值需要在任何地方使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
  • 1970-01-01
  • 2017-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多