Вот фрагмент кода, с которым у меня возникают проблемы:
-(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];
}