2010-07-18 2 views
0

내 메서드가 객체를 onTouchEventReceiver으로 설정할 때마다 다른 스레드가 다른 메서드를 호출하면 해당 메서드가 손실됩니다. 화면 터치 후ObjC에서 개체를 설정할 수 없습니까?

2010-07-18 23:40:54.776 app[737:903] setting obj to <appCtl: 0x10fa00> 
2010-07-18 23:40:54.787 app[737:903] ====----- <appCtl: 0x10fa00> 

...

Got touch event at coordinates 154 x 243 , mask : 2 
2010-07-18 23:41:39.342 app[737:3b03] AALayer hit test passed : <AALayer: 0x110af0> 
2010-07-18 23:41:39.348 app[737:3b03] firing a selector at (null) by <AALayer: 0x110af0> 

왜 그렇게 않습니다

//In header 
id onTouchEventReceiver; 
SEL onTouchSelector; 

- (void) setOnTouchSelector:(SEL)sel withObject:(id)obj 
{ 
    NSLog(@"setting obj to %@",obj); 
    onTouchSelector = sel; 
    [self setOnTouchEventReceiver:obj]; 
    NSLog(@"====----- %@",onTouchEventReceiver); //That works 
} 

//Another thread calls this 
- (void) touchEventReceived 
{ 
    NSLog(@"firing a selector at %@ by %@",onTouchEventReceiver,self); 

    //Why on earth does that happen????? 

    if (onTouchEventReceiver != nil) //onTouchEventReceiver is (null) 
    { 
     [onTouchEventReceiver performSelector:onTouchSelector]; 
    } 
} 

코드는이 다음과 같은 생산? 코드가 올바른 것 같습니다.

+1

는 모든 코드가 표시되지 않는 작동하지만이 모든 확신 그 NSLog(@"====----- %@", [self getOnTouchEventReceiver]);에 같은 인스턴스에서 발생합니까? setOnTouchSelector에서 NSLog'self'를 사용할 수 있습니까? – mvds

답변

2

로그 메시지의 AALayerCALayer의 하위 클래스라고 생각합니다. 이 경우 두 개의 개별 객체가 쉽게 생길 수 있습니다. CALayer은 렌더링 기계에 의한 프리젠 테이션을 위해 복제됩니다. 이것이 문제인 경우 여분의 ivars를 적절하게 복사하려면 -initWithLayer:의 하위 클래스를 지정해야합니다.

0

@property를 (를) 잊어 버렸습니다. 당신은 할 수 :

1/나에게 속성 코드를보기

2 /이 라인을 변경 : NSLog(@"====----- %@",onTouchEventReceiver); //That works //