DSBezelActivityView не работает - PullRequest
0 голосов
/ 18 мая 2011

Вот фрагмент кода, с которым у меня возникают проблемы:

-(IBAction) nextRegister {
    [DSBezelActivityView newActivityViewForView:self.view.superview];
    previousPosition = (NSInteger *) currentPosition;
    currentPosition = (NSInteger *) ((int)currentPosition + (int) 1 );    
    [currentRegistry updateOnServer];
    [self loadNewRegisterInfos];
    [DSBezelActivityView removeViewAnimated:YES];
}

Строка за строкой, вот что этот фрагмент делает (или должен делать):

ПоказатьDSBezelActivityView (из этого: http://www.dejal.com/developer/dsactivityview)

Предыдущая позиция получает фактическую позицию (поскольку она переместится к следующей)

Следующая текущая + 1;

Обновляет запись на сервере(это занимает ~ 1 с)

Загружает новую запись и отображает на экране (это занимает 1 ~ 3 с, вершины)

Эта строка удаляет DSBezelActivityView.

Итак, когда янажмите кнопку, чтобы загрузить следующую запись, она должна показать ActivityView, загрузить данные, затем обновить экран и выпустить ActivityView. Но что происходит: Это останавливает приложение на 3 с, показывает и отклоняет представление деятельности менее чем засекунду, а затем завершает процедуру. Что не так?


[Отредактировано] Решено! Это проблема с потоком. Разделить на 4 метода:

-(IBAction) nextRegister {
    [NSThread detachNewThreadSelector:@selector(openActivityView) toTarget:self     withObject:nil];
    [self viewNextRegister];
    [self removeView];
}

-(void)viewNextRegister{
    previousPosition = (NSInteger *) currentPosition;
    currentPosition = (NSInteger *) ((int)currentPosition + (int) 1 );
    [currentRegister setScoreOnServer];
    //    [NSThread detachNewThreadSelector:@selector(loadRegisterInfo) toTarget:self withObject:nil];
    [self loadRegisterInfo];
}

-(void)openActivityView{
    [DSBezelActivityView newActivityViewForView:self.view.superview];
}

-(void)removeView {
    [DSBezelActivityView removeViewAnimated:YES];    
}

1 Ответ

2 голосов
/ 18 мая 2011

Вместо отдельного потока, который может вызвать проблемы, если вы не будете осторожны, вы также можете сделать:

-(void) doNextRegister {
    previousPosition = (NSInteger *) currentPosition;
    currentPosition = (NSInteger *) ((int)currentPosition + (int) 1 );    
    [currentRegistry updateOnServer];
    [self loadNewRegisterInfos];
    [DSBezelActivityView removeViewAnimated:YES];
}

-(IBAction) nextRegister {
    [DSBezelActivityView newActivityViewForView:self.view.superview];
    [self performSelector:@selector(doNextRegister) withObject:nil afterDelay:0.0];
}
...