2012-06-10 3 views
0

이 문제를 해결하는 데 많은 어려움이 있습니다. 이 메서드는 다른 클래스에서 내 viewController.m으로 가져옵니다. 코드를 동일한 파일의 IBAction에 복사하면 올바르게 작동합니다. 그리고 "시험 미디"는 그것이 예정되어있을 때 로깅하고 있습니다. 그래서 IBOutlets 및 애니메이션 코드 확인을 보이지만 어떤 이유로이 방법이 단순히 이미지를 교체하려면이 옵션을 넣을 경우는 작동하지 않습니다이 애니메이션에서이 애니메이션이 작동하지 않습니다.

- (void) source:(theSource*)data dataReceived:(const dataList *)theList 
    { 

     led.animationImages = [NSArray arrayWithObjects:[UIImage imageNamed:@"led-highlighted.png"],[UIImage imageNamed:@"led-passive.png"],nil]; 
     led.animationDuration = 0.3; 
     led.animationRepeatCount = 20; 
     [led startAnimating]; 
    NSLog(@"test");} 

에 예상되는 일을하지 않습니다. 이 메서드는 콘솔에 로깅하기 때문에 호출되고 있습니다.

midiLed.image = [UIImage imageNamed:@ "led-highlighted.png"]; 

답변

0

이 메서드를 호출하는 방법에 문제가있을 수 있습니다. 기본 스레드에 있어야하며이를 호출 한 후 사용자 인터페이스가 변경되기 전에 코드가 실행 루프 (코드가 완료되어야 함)로 돌아와야합니다.

이 방법이 도움이되지 않는다면이 방법을 호출하는 코드를 공유하십시오.

0

-source:dataReceived:이 (가) 호출되는 스레드는 무엇입니까? CoreMIDI를 사용하는 경우 MIDI 수신 함수는 별도의 중요 우선 순위 스레드에서 호출됩니다.

UIKit은 스레드로부터 안전하지 않으므로 기본이 아닌 스레드에서 UI를 건드려서는 안됩니다.

- (void) source:(theSource*)data dataReceived:(const dataList *)theList 
{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     led.animationImages = [NSArray arrayWithObjects:[UIImage imageNamed:@"led-highlighted.png"],[UIImage imageNamed:@"led-passive.png"],nil]; 
     led.animationDuration = 0.3; 
     led.animationRepeatCount = 20; 
     [led startAnimating]; 
     NSLog(@"test"); 
    }); 
} 
:

는 다음 주 스레드에서 UI 실행을 얻을 수있는 하나의 방법

관련 문제