Обновление данных на iPhone приводит к тому, что система становится нестабильной или не отвечает - PullRequest
0 голосов
/ 28 сентября 2010

все, у меня проблемы здесь

Мне нужно обновить данные plist за период времени

и я использую панель вкладок для переключения между 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]
}

Итак, мой вопрос: как прекратить обновление данных, когда я переключаюсь в другое представление?

спасибо за ответ ..... это большая ошибка, раздражающая меня

Ответы [ 2 ]

2 голосов
/ 28 сентября 2010

Если вы используете асинхронный NSURLConnection, вы можете отправить сообщение об отмене соединению (которое все еще загружено) при переключении на другое представление.Асинхронный метод будет держать ваш пользовательский интерфейс отзывчивым в качестве бонуса, что не похоже на синхронный метод, как указал Оле Бегеманн.

Здесь вы можете найти информацию о том, как использовать асинхронный метод: Программирование загрузки URL-адресаРуководство

Редактировать: Вероятно, следует также остановить таймер (отправив ему сообщение о недействительности), когда представление не отображается, таким образом, таймер не срабатывает, когда представлениене отображается, вызывая загрузку данных.

Ссылка класса NSTimer

2 голосов
/ 28 сентября 2010

Не использовать sendSynchronousRequest:returningResponse:error:.Ваша программа полностью блокируется во время этого вызова и даже может быть прервана ОС, если сеть не отвечает или сервер не работает.

Используйте только асинхронные NSURLConnection s.Вы можете отправить им сообщение cancel в любое время.

...