Как использовать executeSelector: withObject: afterDelay: с примитивными типами в Какао? - PullRequest
96 голосов
/ 24 мая 2009

Метод NSObject performSelector:withObject:afterDelay: позволяет мне вызывать метод объекта с аргументом объекта через определенное время. Его нельзя использовать для методов с необъектным аргументом (например, целыми числами, числами с плавающей точкой, структурами, необъектными указателями и т. Д.).

Каков простой способ добиться того же с помощью метода с необъектным аргументом? Я знаю, что для обычного performSelector:withObject: решение состоит в том, чтобы использовать NSInvocation (что, кстати, действительно сложно). Но я не знаю, как справиться с «задержкой».

Спасибо

Ответы [ 13 ]

1 голос
/ 25 февраля 2011

Вызов executeSelector с NSNumber или другим NSValue не будет работать. Вместо использования значения NSValue / NSNumber он будет эффективно приводить указатель к типу int, float или к чему угодно и использовать его.

Но решение простое и очевидное. Создайте NSInvocation и позвоните

[invocation performSelector:@selector(invoke) withObject:nil afterDelay:delay]

1 голос
/ 12 января 2010

Вы можете просто использовать NSTimer для вызова селектора:

[NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(yourMethod:) userInfo:nil repeats:NO]
0 голосов
/ 27 июля 2010

Возможно ... хорошо, очень вероятно, я что-то упустил, но почему бы просто не создать тип объекта, скажем NSNumber, в качестве контейнера для вашей переменной необъектного типа, такой как CGFloat?

CGFloat myFloat = 2.0; 
NSNumber *myNumber = [NSNumber numberWithFloat:myFloat];

[self performSelector:@selector(MyCalculatorMethod:) withObject:myNumber afterDelay:5.0];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...