NSJSONSerialization 不更新数据

Posted

技术标签:

【中文标题】NSJSONSerialization 不更新数据【英文标题】:NSJSONSerialization not updating data 【发布时间】:2012-06-13 15:26:12 【问题描述】:

我正在尝试使用 ios5 的 NSJSONSerialization 解析 JSON。这段代码第一次正确地解析了我想要的数据,但是数据只是保持不变。 URL 上的 JSON 已经改变,但代码一直给我它解析的第一个数据,现在是不正确的。不管我“构建和运行”多少次,它总是给我同样的东西。

当我将代码复制到新项目时,它再次工作,第一次,然后做同样的事情。

我不知道问题出在哪里,也许是缓存?

谢谢你的帮助!!!

- (void)fetchedData:(NSData *)responseData 
    NSError* error;
    NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData
                                                     options:kNilOptions 
                                                       error:&error];
    NSArray* allDepartures = [json objectForKey:@"departures"];

    NSLog(@"departures: %@", allDepartures);
    NSDictionary* stops = [allDepartures objectAtIndex:0];
    NSNumber* time = [stops objectForKey:@"expected_mins"];
    NSString* name = [stops objectForKey:@"headsign"];

    nameLabel.text = [NSString stringWithFormat:@"%@",name];
    timeLabel.text = [NSString stringWithFormat:@"%i",[time intValue]];


- (IBAction)getInfo:(id)sender 
    dispatch_async(kBgQueue, ^
        NSData* data = [NSData dataWithContentsOfURL: myURL];
        [self performSelectorOnMainThread:@selector(fetchedData:) 
        withObject:data waitUntilDone:YES];
);

【问题讨论】:

一段时间后(比如一小时),它会像第一次安装应用程序时一样加载(数据正确),然后它会做同样的事情,而不是更新 【参考方案1】:

你如何设置“myURL”,只在viewDidLoad中?一段时间后,如果操作系统调用 viewDidUnload 并且您再次运行应用程序,则会调用 viewDidLoad 并再次设置 myURL。如果是这种情况,您应该在每次调用 getInfo 时设置 myURL。

【讨论】:

感谢您的回复。我试过了,但还是不行。我认为这与缓存有关。我第一次运行应用程序时,加载需要 2-3 秒,但之后它只是显示而没有加载。 在 NSData*data 行设置断点并仔细检查 myURL 是否正常

以上是关于NSJSONSerialization 不更新数据的主要内容,如果未能解决你的问题,请参考以下文章

NSJSONSerialization 不解析 NSManagedObject

NSJSONSerialization 不工作,NSUTF8StringEncoding 工作

NSJSONSerialization 不解析这个 JSON

NSJSONSerialization 不创建可变容器

NSJSONSerialization - 无法将数据转换为字符串

使用 NSJSONSerialization 解析 twitter 搜索 json 数据