2014-04-02 199 views
1

我从一个url中获取json数据并将其中一个值传给NSUserdefaults以将其用于应用程序视图。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在用户输入新代码时正在提取正确的新值

谢谢。

+3

您确定在“保存代码”之后调用了“查看代码”吗? – Krivoblotsky

+2

与你的问题无关,但在'for'循环后面调用'-synchronize'可能更聪明一点? (而不是每次迭代)。 –

回答

0

您确定viewDidLoad是添加此代码的最佳地方吗?

尝试在更频繁调用的某些方法中添加您的代码。对于调试,我通常会添加一些按钮来调用NSLog来查看会发生什么。

0

如果您想要在浏览器中加载文本,请尝试此操作。

- (void)viewWillAppear:(BOOL)animated { 
    _Footer.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"op_footer"]; 
} 

或者你可以尝试这个,如果你想在获得新代码后将它加载到标签。

- (void)updateLabel { 
    _Footer.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"op_footer"]; 
} 

希望这有助于.. :)

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中的值。

你也停止循环中的动画?

+0

嗨,我从循环中移动动画。感谢那 。视图类是不同的,所以我不能在json抓取类中更新。中间有两个视图1.用户将在此输入一个代码(第一视图),我们将获取设置2。另一个视图显示认证详细信息(我们仍然在NSuserdefaults中有许多值,但这里没有用到)3.第三个视图iwll显示获取的值(这里我们将取NSdefaults) –

相关问题