我在这里遇到问题的每个人
我需要在一段时间内更新plist数据
我使用Tab Bar切换2个视图
当我选择view1时,它将从URL加载数据
但是如果我切换到view2,view1仍然会更新数据
如果切换到view2并切换回来,view2会不断更新数据。
这是我用来更新数据的代码 在LoadData.h中
@interface LoadData : UITableViewController < NSNetServiceBrowserDelegate > {
NSArray *plist;
NSTimer *timer;
}
LoadData.m中的
static const float REFRESH_STATUS_TIME = 2.0;
- (void)viewDidLoad {
timer = [NSTimer scheduledTimerWithTimeInterval:REFRESH_STATUS_TIME
target:self
selector:@selector(timerFired:)
userInfo:nil
repeats:YES];
[super viewDidLoad];
}
- (void)timerFired:(NSTimer *)theTimer{
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://10.85.28.99/envotouch/req_light.php"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
NSLog(@"\n\nCONNECTION: %@", theConnection);
NSData *returnData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:nil error:nil];
NSString *listFile = [[NSString alloc] initWithData:returnData encoding:NSASCIIStringEncoding];
self.plist = [listFile propertyList];
[self.tableView reloadData]
}
所以我的问题是当我切换到另一个视图时如何终止数据更新?
感谢回复.....这是一个让我烦恼的大错误
答案 0 :(得分:2)
请勿使用sendSynchronousRequest:returningResponse:error:
。您的程序在该呼叫期间被完全阻止,如果网络没有响应或服务器已关闭,甚至可以由操作系统终止。
仅使用异步NSURLConnection
。您可以随时向他们发送cancel
消息。
答案 1 :(得分:2)
如果您使用异步NSURLConnection
,则可以在切换到另一个视图时将取消消息发送到连接(仍在忙于加载)。异步方法将使您的UI响应为奖励,同步方法不会像Ole Begemann所指出的那样。
您可以在此处找到有关如何使用异步方法的信息:URL Loading System Programming Guide
编辑:当视图未显示时,您可能也会停止计时器(通过发送无效消息),这样当未显示视图导致负载时计时器不会触发数据。