Форум программистов, компьютерный форум CyberForum.ru

Objective-C

Войти
Регистрация
Восстановить пароль
 
BohdanSavych
1 / 1 / 0
Регистрация: 25.12.2013
Сообщений: 44
#1

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

13.10.2015, 12:33. Просмотров 379. Ответов 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];
    
    
}
Но есть одна проблема кнопки не успевают изменить надпись и фон.Но все работает.Может есть другой способ вызывать функ. после некоторого времени?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2015, 12:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вызов функции после некоторого времени (Objective-C):

Вызов функции из MKStoreManager - Программирование iOS
Привет, ребята. У меня такая аномалия. Вот код: if() { setBool:YES forKey:@"is1Monster"]; ; ...

Удаление линии после некоторого времени - ActionScript
Не могу разобраться как можно по кусочкам удалять нарисованную линию package { import flash.display.*; import flash.events.*; ...

Пропадает звук после некоторого времени. - Звук, акустика
Всем доброго времени суток. У меня тут проблемка...уже извелся, пробовал все, что только можно, толку ноль. Итак, суть: При включении...

Лаги в FIFA 12 после некоторого времени игры - Спортивные игры
сначала все идет норм на максималке. потом начинает лагать по страшному. Ноут проц AMD Turion P 540 2,4 МГц, Ram 4 GB DDR, видюха ATI...

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
residentkms
21 / 21 / 8
Регистрация: 20.10.2013
Сообщений: 138
Завершенные тесты: 1
13.10.2015, 15:31 #2
performSelector: withObject: afterDelay:
или
dispatch_after
BohdanSavych
1 / 1 / 0
Регистрация: 25.12.2013
Сообщений: 44
13.10.2015, 16:45  [ТС] #3
Objective-C
1
 [self performSelector:@selector(setCardWrap:index:)     withObject:self afterDelay:2];
Наверно ,я что-то делаю неправильно,так ка не работает и вылетает програма.
Митя800
51 / 51 / 13
Регистрация: 13.07.2015
Сообщений: 174
13.10.2015, 18:25 #4
BohdanSavych, сигнатура метода
Objective-C
1
setCardWrap:
а не
Objective-C
1
setCardWrap:index:
а параметр withObject принимает конкретный index, и лучше его сделать типом NSNumber.
BohdanSavych
1 / 1 / 0
Регистрация: 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];
Теперь не вылетает,но дальше не работает(
BohdanSavych
1 / 1 / 0
Регистрация: 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#> 
});
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2015, 09:12
Привет! Вот еще темы с ответами:

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

После некоторого времени в игре она начинает глючить. - Компьютерное железо
Появилась проблема такая: после некоторого времени проведения в онлайновых играх, персонаж начинает дёргаться быстро вперёд-назад, в...

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.10.2015, 09:12
Ответ Создать тему
Опции темы

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