Performselector - аргумент 2 делает указатель из целого числа без приведения - PullRequest
0 голосов
/ 30 июля 2011

У меня есть этот код:

[self performSelector:@selector(animationWithType:) withObject:PasscodeAnimationTypeConfirm afterDelay:0.2];

К этому методу:

-(void)animationWithType:(PasscodeAnimationType)type;

Поместив это на место:

[self performSelector:@selector(animationWithType:) withObject:[NSNumber numberWithInt:PasscodeAnimationTypeConfirm] afterDelay:0.2];

возвращает NSLog "1 ", который мой метод не классифицирует как то же значение, что и PasscodeAnimationTypeConfirm.Как я могу это исправить?

Ответы [ 2 ]

2 голосов
/ 30 июля 2011

Да, насколько я знаю, вы можете выполнять только executeSelector: blahBlah: withDelay: с объектами в качестве параметров, а не с типами (целыми числами, символами и т. Д.).

Вы можете создать еще одну функциювы, как это:

-(void)animationWithNumber:(NSNumber)type{
    [self animationWithType:[NSNumber intValue]];
}

И используя это из кода, который вы разместили:

[self performSelector:@selector(animationWithType:) withObject:[NSNumber numberWithInt:PasscodeAnimationTypeConfirm] afterDelay:0.2];
1 голос
/ 17 сентября 2013

@ Эмилио: Разве ваш вызов executeSelector не должен вызывать ваш новый метод?

[self performSelector:@selector(animationWithNumber:) withObject:[NSNumber numberWithInt:PasscodeAnimationTypeConfirm] afterDelay:0.2];

Вот мой пример, демонстрирующий более детальное использование этой концепции.

http://kerkermeister.net/objective-c-adapter-from-nsinteger-to-id-when-using-performselector-withobject/

Адаптер выглядит следующим образом и выполняет еще несколько проверок:

-(void)animationWithNumber:(id)_animationType {
    if ([_animationType respondsToSelector:@selector(intValue)]) {
        int _t = [_animationType intValue];
        switch (_t) {
            case AnimationType1:
                _t = AnimationType1;
                break;
            case AnimationType2:
                _t = AnimationType2;
                break;
            default:
                _t = AnimationTypeUndefined;
                break;
        }
        [self animationWithType:_t];
    }
}
...