Форум программистов, компьютерный форум, киберфорум
Наши страницы
Objective-C
Войти
Регистрация
Восстановить пароль
 
BohdanSavych
1 / 1 / 1
Регистрация: 25.12.2013
Сообщений: 44
1

Вызов функции после некоторого времени

13.10.2015, 12:33. Просмотров 445. Ответов 5
Метки нет (Все метки)

У меня есть функция котороя обновляет интерфейс.Она меняет поле Title,BackGroundImage.
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-(void)setCardWrap:(NSUInteger)index//need to update all view
{
    for(UIButton* but in self.buttons)
    {
        index=[self.buttons indexOfObject:but];
        if([[[self.buttons objectAtIndex:index] currentTitle]isEqualToString:@""]==true
           &&[[self.deck getCardAtIndex:index]isChecked]==YES)
        {
            [[self.buttons objectAtIndex:index] setTitle:[[self.deck getCardAtIndex:index]getPresentDataAboutCurrentCard]
                                            forState:UIControlStateNormal];
            [[self.buttons objectAtIndex:index] setBackgroundImage:[UIImage imageNamed:@"frontCard"] forState:UIControlStateNormal];
        }
        else if( [[self.deck getCardAtIndex:index]isChecked]==NO
            &&[[self.deck getCardAtIndex:index]isMatched]==NO)
        {
            [[self.buttons objectAtIndex:index] setTitle:@""
                                            forState:UIControlStateNormal];
            [[self.buttons objectAtIndex:index] setBackgroundImage:[UIImage imageNamed:@"cardback-legendrank"] forState:UIControlStateNormal];
        }
    }
}
Мне нужно чтобы она исполнялась после некоторого времени.Не придумав ничего лучше чем sleep.
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- (IBAction)onCardClick:(UIButton *)sender {
    BOOL needToOverTurn=NO;
    if([self.deck compareCurrentCardWithDeck:[self.buttons indexOfObject:sender]]==NO&&[self.deck countOfCheckedCards]!=0)
    {
        needToOverTurn=YES;
    }
    NSUInteger index=[self.buttons indexOfObject:sender];
    [self.deck choseCard:index];
     [self setCardWrap:index];
    if(needToOverTurn==YES)
    {
        sleep(3);
         [self.deck overturnNotMathedCards];
        
    }
    [self setCardWrap:index];
    
    
}
Но есть одна проблема кнопки не успевают изменить надпись и фон.Но все работает.Может есть другой способ вызывать функ. после некоторого времени?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2015, 12:33
Ответы с готовыми решениями:

Вызов функции из MKStoreManager
Привет, ребята. У меня такая аномалия. Вот код: if() { setBool:YES...

Пропадает звук после некоторого времени.
Всем доброго времени суток. У меня тут проблемка...уже извелся, пробовал все,...

Удаление линии после некоторого времени
Не могу разобраться как можно по кусочкам удалять нарисованную линию package...

Отключается монитор после некоторого времени работы
Здравствуйте! У меня такая проблема с компом. После 10-15 мин. использования(а...

Падение производительности после некоторого времени работы
Здравствуйте. Подскажите, с чем может быть связано падение производительности...

5
residentkms
21 / 21 / 8
Регистрация: 20.10.2013
Сообщений: 138
Завершенные тесты: 1
13.10.2015, 15:31 2
performSelector: withObject: afterDelay:
или
dispatch_after
0
BohdanSavych
1 / 1 / 1
Регистрация: 25.12.2013
Сообщений: 44
13.10.2015, 16:45  [ТС] 3
Objective-C
1
 [self performSelector:@selector(setCardWrap:index:)     withObject:self afterDelay:2];
Наверно ,я что-то делаю неправильно,так ка не работает и вылетает програма.
0
Митя800
66 / 66 / 19
Регистрация: 13.07.2015
Сообщений: 219
13.10.2015, 18:25 4
BohdanSavych, сигнатура метода
Objective-C
1
setCardWrap:
а не
Objective-C
1
setCardWrap:index:
а параметр withObject принимает конкретный index, и лучше его сделать типом NSNumber.
0
BohdanSavych
1 / 1 / 1
Регистрация: 25.12.2013
Сообщений: 44
13.10.2015, 18:59  [ТС] 5
Cпасибо.Исправил на
Objective-C
1
NSNumber *numb=[[NSNumber alloc]initWithInt:index];
Objective-C
1
[self performSelector:@selector(setCardWrap:)withObject:numb afterDelay:20];
Теперь не вылетает,но дальше не работает(
0
BohdanSavych
1 / 1 / 1
Регистрация: 25.12.2013
Сообщений: 44
15.10.2015, 09:12  [ТС] 6
Решил проблему.Может кому-то надо будет
Objective-C
1
2
3
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(<#delayInSeconds#> * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
<#code to be executed after a specified delay#> 
});
0
15.10.2015, 09:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2015, 09:12

Лаги в FIFA 12 после некоторого времени игры
сначала все идет норм на максималке. потом начинает лагать по страшному. Ноут...

Перезагружается компьютер после некоторого времени работы.
Появилась такая проблема,после некоторого времени работе на компьютере он...

После некоторого времени фпс в играх сильно падает
В играх после минут 10-15 фпс падает почти в 2 раза . Во время простоя...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru