我想使用一个选择器在我的视图控制器中调用一个func,我想要将一个通道的数量传递给func。这需要是一个Int,但我不能让选择器正确响应。我怎么解决这个问题?
- (void)sendBusGetPar {
[self.viewController performSelector:@selector(getBusParams:) withObject: self.bus.channelNumber];
}
这是控制器中的接收函数
- (void)getBusParams:(NSInteger)busChannel {
[[self tcpControl] sendMessage:cmd(GETPAR) Module:module(BUS) ModuleIndex:busChannel
Section:section(CONTROL) SectionIndex:0
Unit:unit(FADER) UnitIndex:0
Param:param(POSITION) Value:0];
}
我知道它与转换和类型有关,但我不明白为什么在这种情况下我无法通过Int发送频道号码?
我也尝试了这个,但是选择器没有响应所以我认为它错了?
[self.viewController performSelector:@selector(getBusParams:) withObject: [NSNumber numberWithInteger:self.bus.channelNumber]];
答案 0 :(得分:3)
performSelector:
不应该被滥用于正常的方法调用。
为什么不直接调用该方法?
[self.viewController getBusParams:self.bus.channelNumber];
如果您的viewController
具有泛型类型,请将其转换为正确的类型:
[(MyViewController *) self.viewController getBusParams:self.bus.channelNumber];
答案 1 :(得分:1)
该方法使用对象 表示。不幸的是NSUInteger
不是一个对象。
一个合适的解决方案是从标量整数创建一个NSNumber
对象并传递它。
[self.viewController performSelector: @selector(getBusParams:)
withObject: @(self.bus.channelNumber)];
在接收方,您需要使用unsignedIntegerValue
将其删除
属性。
- (void)getBusParams:(NSNumber *)busChannel
[[self tcpControl] sendMessage:cmd(GETPAR)
Module:module(BUS)
ModuleIndex:busChannel.unsignedIntegerValue ...