Я разрабатываю приложение для iPhone, похожее на Skype, и сталкиваюсь с «проблемой».
Я получаю события для контактов, которые подключаются к сети или отключаются, но я не знаю, когда эти обновления начнутся иликонец.Я знаю, что обычно событие подключения происходит не позднее, чем через 0,2 секунды после предыдущего события.И в любом случае, если это произойдет позже, мне все равно.
Когда все события сгруппированы, я обновляю свой просмотр таблицы, чтобы показать новый статус контактов.(Ранее я обновлял свой просмотр таблицы, как только получаю событие подключения, но теперь, когда я начинаю работать с большим количеством контактов, это больше не подходит)
Учитывая отсутствующую информацию начала / конца обновления, которую я настроилсистема проверки на основе таймера, которая выполняет следующие действия:
- (void)connectionStatusEventReceivedForContact:(Contact *)aContact {
if (!isUpdating) {
[self willStartToUpdateContacts];
}
newUpdateReceived = TRUE;
NSIndexPath *indexPathToUpdate = [delegate indexPathOfContact:aContact];
if (indexPathToUpdate != nil && ![indexPathsOfContactToUpdate containsObject:indexPathToUpdate]) {
[indexPathsOfContactToUpdate addObject:indexPathToUpdate];
}
[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(newUpdateReceived:) userInfo:nil repeats:NO];
}
- (void)willStartToUpdateContacts {
isUpdating = TRUE;
}
- (void)newUpdateReceived:(id)sender {
[self isLastUpdate:nil];
[NSTimer scheduledTimerWithTimeInterval:0.6 target:self selector:@selector(updateNewUpdateBoolean:) userInfo:nil repeats:NO];
}
- (void)updateNewUpdateBoolean:(id)sender {
newUpdateReceived = FALSE;
lastUpdateTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(isLastUpdate:) userInfo:nil repeats:NO];
}
- (void)isLastUpdate:(id)sender {
if (!newUpdateReceived) {
[self didUpdateContacts];
}
newUpdateReceived = TRUE;
}
Как видите, это немного сложно, меня беспокоит то, что, когда у меня 500 контактов, запланировано 1001 таймер.И это не очень хорошее решение.Я думаю, как мне это сделать, но пока не нашел решения, которое мне действительно нравится.Я уверен, что кто-то из вас поможет мне найти лучшее решение: D
Спасибо, ребята