Запрос Xcode cocoa osx NSTextField

#xcode #macos #cocoa #nstextfield #display

#xcode #macos #какао #nstextfield #отображение

Вопрос:

Я создал простое приложение на основе математики. Приложение задает пользователю 6 вопросов таблицы умножения. например, Q1 10 x 10 Пользователь вводит ответ, приложение отображает, был ли ответ пользователя правильным или неправильным, и отображает это с помощью следующего

 IBOutlet NSTextField *CorrectIncorrect;
  

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

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

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

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

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

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

    stopInterval = [NSDate timeIntervalSinceReferenceDate];
    }
}
  

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

Комментарии:

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

Ответ №1:

Несколько вещей:

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

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

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

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

одна строка и более интуитивно понятна

Комментарии:

1. 3) или без центральной диспетчерской: [CorrectIncorrect performSelector:@selector(setStringValue:) withObject:@"" afterDelay:10.0];

2. Большое спасибо за полезное предложение, и оба решения работают. Отлично!