Не можете установить объект в ObjC? - PullRequest
0 голосов
/ 19 июля 2010

Всякий раз, когда мой метод устанавливает объект на onTouchEventReceiver , он теряется, когда другой поток вызывается другим методом.

//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>

Почему это происходит? Код кажется правильным.

Ответы [ 2 ]

2 голосов
/ 19 июля 2010

AALayer в вашем сообщении журнала заставляет меня думать, что это может быть подкласс CALayer.Если это так, то вы можете легко иметь два отдельных объекта.CALayer s дублируются для представления механизмом рендеринга.Если это проблема, вам необходимо создать подкласс -initWithLayer:, чтобы соответствующим образом скопировать ваши дополнительные ивары.

0 голосов
/ 19 июля 2010

Я думаю, ты забыл @property.Можете ли вы:

1 / Покажите мне код свойства

2 / Измените эту строку на: NSLog(@"====----- %@",onTouchEventReceiver); //That works на NSLog(@"====----- %@", [self getOnTouchEventReceiver]); // Это работает

...