iOS 在更新后从 Web 服务重新加载数据

Posted

技术标签:

【中文标题】iOS 在更新后从 Web 服务重新加载数据【英文标题】:iOS reloading data from a webservice after an update 【发布时间】:2012-08-10 01:03:54 【问题描述】:

我正在编写一个 ios 应用程序,它从 web 服务加载数据并将数据放入表视图中。用户可以通过单击单元格然后选择一个值来更新单元格中的数据。选择该值后,我希望表更新以反映新数据,实质​​上是重新从 web 服务进行数据的初始下载。在更新方法结束时,我调用了我的初始加载方法,但这似乎不起作用。它只是重新加载所有原始数据。我的更新方法到此结束:

self.connectionInProgress = [[[NSURLConnection alloc] initWithRequest:request delegate:self] autorelease];

[self loadLines];

还有载线法:

- (void)loadLines
   
    NSLog(@"going again?");
    [Results removeAllObjects];
    [Results release];
    Results = nil;
    Results = [[NSMutableArray alloc] init];

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_async(queue, ^

        NSString *jsonString = [self performFetchWithURL:lineURL];
        if(jsonString == nil) 
            [self showNetworkError];
            return;
        

        NSDictionary *dictionary = [self parseJSON:jsonString];
        if(dictionary == nil) 
            dispatch_async(dispatch_get_main_queue(), ^
                [self showNetworkError];
            );
            return;
        

        [self parseDictionary:dictionary];

        dispatch_async(dispatch_get_main_queue(), ^
            isLoading = NO;
            [self.tableView reloadData];
        );
    );

parseDictionary 和 performFetchWithURL 是 iOS 5 中非常标准的 JSON 交互...将数据放入 Results 数组中。通过清除我的结果数组然后重新创建它,我是否在做正确的事情?

我将如何获取全新的数据?

【问题讨论】:

你检查你的请求的缓存策略了吗? 【参考方案1】:

我强烈建议研究 ASIHTTPRequest。它可能是也可能不是您的问题的解决方案,但它会删除许多不必要的代码,使您的项目更易于调试。 GCD 很棒,但是当您向其发送垃圾邮件时,它会很快失控并导致您遇到的奇怪行为。

http://allseeing-i.com/ASIHTTPRequest/How-to-use

//Unsafe_unretained is for ARC which it doesn't look like you are using.
__unsafe_unretained ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:lineURL]];

// Code inside of this block will run when the request finishes
// This code will also be called to on the main thread. So you can avoid your own GCD
[request setCompletionBlock:^
    if (![request responseString])
    
        [self showNetworkError];
        return;
    
    NSDictionary *dictionary = [self parseJSON:[request responseString]];
    if(dictionary == nil) 
        [self showNetworkError];
        return;
    

    [self.tableView reloadData];
];

//This code will run if your request fails
[request setFailedBlock:^
     NSLog(@"Failed %@", [request error]);
];

[request startAsynchronous];//Start the request

我会试一试。如果这不能解决您的问题,那么您的问题很可能存在于您尚未发布的代码中。

对于 sn-p 中的任何语法错误,我深表歉意。我手头没有编译器。

【讨论】:

我很确定不再维护 ASIHTTP。我想避开第三方。不过感谢您的帮助!

以上是关于iOS 在更新后从 Web 服务重新加载数据的主要内容,如果未能解决你的问题,请参考以下文章

XMLHttpRequest

XMLHttpRequest 对象

Ajax学习

XmlHttpRequest对象 ajax核心之一

XMLHttpRequest 对象

Ajax的基本请求/响应模型