오류 메시지를 보내는 기능 (sendError
)이 있습니다. 그리고 5 초 후에 다음과 같이 제거됩니다 :디스패치 명령 덮어 쓰기
-(void)sendError:(NSString*)message{
_errorMessage.stringValue = message;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
_errorMessage.stringValue = @"";
});
}
문제는 버튼의 경우 한 번 실행하고 있다는 것입니다 다시 삼초이 메시지가 나중에 오히려 5 2 초 이상 제거됩니다 실행되고 이후 두 번째.
이전 디스패치를 취소하고 새 디스패치를 쓰려면 어떻게해야합니까 (덮어 쓰기).
기술적으로 *이 솔루션에는 경쟁 조건이 있습니다. – bbum
@bbum : 텍스트 필드라고 가정하는 'stringValue'를 수정하고 있기 때문에 메인 스레드에서 모든 것이 발생한다고 가정합니다. 이 경우 경주는 어디 있습니까? –
그 가정이 성립한다면, 확실히! – bbum