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 服务重新加载数据的主要内容,如果未能解决你的问题,请参考以下文章