#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. Большое спасибо за полезное предложение, и оба решения работают. Отлично!