我正在从网址中传入json数据并将其中一个值传递给NSUserdefaults以将其用于应用程序视图。
示例用户将输入一个给他的唯一代码,此代码将附加到请求的URL,并根据所请求的代码更改json值。
目前,当我输入代码时,它正在获取并保存NSuserdefaults
并将其传递给视图中的标签。但是当我输入新代码并确定新数据时,它不会在视图中更新。如果我重新启动应用程序并输入新代码,那么它将显示新值。有人可以帮助我。这是代码
NSString *jsonUrlString = [[NSString alloc] initWithFormat:@"http://mywebsite.com/json/code.php?user=%@",_opcodeField.text];
NSURL *url = [NSURL URLWithString:[jsonUrlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url];
[_indicator startAnimating];
_indicator.hidesWhenStopped = YES;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
//-- JSON Parsing
NSMutableArray *result = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:nil];
NSLog(@"settings = %@",result);
for (NSDictionary *dic in result)
{
[[NSUserDefaults standardUserDefaults] setObject:[dic objectForKey:@"footer"] forKey:@"op_footer"];
[[NSUserDefaults standardUserDefaults] synchronize];
[_indicator performSelectorOnMainThread:@selector(stopAnimating) withObject:nil waitUntilDone:YES];
}
查看代码是:
(void)viewDidLoad {
[super viewDidLoad];
_Footer.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"op_footer"];
如何在不重新启动应用程序的情况下显示新值。是否有任何代码可以添加到视图中?我可以看到当用户输入新代码时,json正在获取正确的新值
谢谢。
答案 0 :(得分:0)
您确定viewDidLoad是添加此代码的最佳位置吗?
尝试在一些更频繁调用的方法中添加代码。对于调试,我通常添加一些按钮只是为了调用NSLog来看看会发生什么。
答案 1 :(得分:0)
如果您想要一直加载到viewcontroller,请尝试使用此文件。
- (void)viewWillAppear:(BOOL)animated {
_Footer.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"op_footer"];
}
或者,如果您想在获取新代码后将其加载到标签,则可以尝试此操作。
- (void)updateLabel {
_Footer.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"op_footer"];
}
希望这会有所帮助.. :)
答案 2 :(得分:0)
用户默认plist可能需要一些时间来保存和更新。它不会立即发生。在某种暂停后尝试触发呼叫。用按钮测试。
编辑:您可以将观察者添加到默认值,以便您知道它已更新 - Cocoa - Notification on NSUserDefaults value change?
答案 3 :(得分:0)
为什么不移动这条线......
_Footer.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"op_footer"];
到这里(除非当然这是另一个班级)......
NSMutableArray *result = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:nil];
NSLog(@"settings = %@",result);
for (NSDictionary *dic in result)
{
[[NSUserDefaults standardUserDefaults] setObject:[dic objectForKey:@"footer"] forKey:@"op_footer"];
[[NSUserDefaults standardUserDefaults] synchronize];
[_indicator performSelectorOnMainThread:@selector(stopAnimating) withObject:nil waitUntilDone:YES];
}
//Update it straight away
_Footer.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"op_footer"];
还有点困惑为什么你在这里循环词典?有不止一本字典吗?如果有最后一个值将始终是存储在UserDefaults中的值。
您也在循环中停止动画?