2010-07-18 69 views
0

每當我的方法將對象設置爲onTouchEventReceiver時,當另一個線程調用另一個方法時,它會丟失。無法在ObjC中設置對象?

//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]; 
    } 
} 

的代碼產生如下:

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> 

爲什麼會發生呢?代碼似乎是正確的。

+1

沒有看到所有的代碼,但是你確定這一切發生在同一個實例?你可以NSLog'self'以及setOnTouchSelector? – mvds 2010-07-18 22:39:52

回答

2

你的日誌消息中的AALayer讓我覺得它可能是CALayer的一個子類。如果是這種情況,那麼你可能很容易有兩個單獨的對象。 CALayer s被複制以供呈現機器呈現。如果這是問題,您需要繼承-initWithLayer:以適當地複製您的額外ivars。

0

我想喲忘了@property。你能:

1 /顯示我的屬性代碼

2 /將此行更改爲:NSLog(@"====----- %@",onTouchEventReceiver); //That worksNSLog(@"====----- %@", [self getOnTouchEventReceiver]); //這工作

相關問題