2016-10-11 4 views
0

Я создал простое приложение на основе математики. Приложение запрашивает у пользователя 6 вопросов таблицы умножения. например Q1 10 х 10 Пользователь вводит ответ Приложение отображает, был ли ответ пользователя правильно или неправильно и отображает это с помощью следующейXcode cocoa osx NSTextfield query

IBOutlet NSTextField *CorrectIncorrect; 

В цикле приложения (1 вопрос 6) CorrectIncorrect используется для отображения строки «правильно» или «неправильно», используя эту строку кода

[CorrectIncorrect setStringValue:receivedAnswer]; 
[[CorrectIncorrect window] display]; 

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

[CorrectIncorrect setStringValue:@""]; 
[[CorrectIncorrect window] display]; 

Первоначально каждый CorrectIncorrect струна очищаются быстро, так что пользователь никогда не видел, если их ответ был «правильным» или «неправильным». Поэтому я использовал метод задержки времени, чтобы замедлить процесс для того, чтобы позволить пользователю видеть дисплей, прежде чем он был cleared.see ниже

- (void)TimeDelay 
{ 
    startInterval = [NSDate timeIntervalSinceReferenceDate]; 
    stopInterval = [NSDate timeIntervalSinceReferenceDate]; 
    while ((stopInterval - startInterval) <= 1) 
    { 

    stopInterval = [NSDate timeIntervalSinceReferenceDate]; 
    } 
} 

Это работало отлично в Xcode 5. Не работает в Xcode 7.3.1 , Любые советы приветствуются.

+0

'[[CorrectIncorrect window] display];' должно быть ненужным. – Willeke

ответ

0

Немногие вещи:

1) Интервал времени в секундах, так <= 1 на самом деле не так много времени, вы пробовали увеличивая это время и посмотреть, что это выглядит?

2) Вы также должны рассмотреть возможность добавления кнопки «Перейти к следующему вопросу». Таким образом, вам не нужно будет иметь таймер

3) Если вы хотите иметь таймер, чтобы сбросить строку, вы должны просто использовать Grand Central Dispatch

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 10 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ 
    [CorrectIncorrect setStringValue:@""]; 
}); 

один-иш линии, и более интуитивно понятный

+0

3) или без Grand Central Dispatch: '[CorrectIncorrect performSelector: @selector (setStringValue :) withObject: @" "afterDelay: 10.0];' – Willeke

+0

Большое спасибо за полезное предложение и решения, которые работают. Большой! – Woollybaabaa

Смежные вопросы