我想做performSelector:withObject:但是对象是CGFloat。所以它实际上不是一个对象。我怎么能这样做?
我正在执行选择器的对象不是我的,我无法修改它。
例如
[xyz performSelector:@selector(setOffset:) withObject:2];
(发布后我稍微改变了我需要的内容:
[xyz performSelector:@selector(setOffset:) withObject:CGSizeMake(2,0)];
答案 0 :(得分:3)
如果您尝试针对您无法控制的对象调用任意选择器,您可以使用NSInvocation来设置选择器,目标和参数,并在获取返回值之后方法已经执行。
但一般来说,有更简单的解决方案。
答案 1 :(得分:0)
您需要一个消息对象。当我需要做这样的事情时,我将创建一个简单的容器类,将数据推送到实例中,然后在需要时执行选择器(通常是@selector(doIt :))。
如果您可以定位4.x,则通常也可以使用块。
(如果不了解更多关于你想要做什么的事情,很难得到更具体的信息。)
答案 2 :(得分:0)
传递的对象是CGFloat。所以它实际上不是一个对象。
正如您之后写的那样,如果您传递了一个对象,则它不能是CGFloat
,因为CGFloat
是一个typedef
'ed原语({{1} }或float
)。
如果您已将数字值作为对象传递,则可能会以某种方式传递double
。
对你的问题没有背景,没有办法确定。
答案 3 :(得分:0)
尝试使用IMP(指向方法实现开始的指针。)
SEL setOffsetSEL = @selector(setOffset:);
IMP setOffsetIMP = [XYZClass instanceMethodForSelector:setOffsetSEL];
setOffsetIMP(xyz, setOffsetSEL, 2);
答案 4 :(得分:-2)
您可以使用:
[NSNumber numberWithFloat:(float)value]