ARC 不允许将 'NSUInteger'(又名 'unsigned long')隐式转换为 'id'?
Implicit conversion of 'NSUInteger' (aka 'unsigned long') to 'id' is disallowed with ARC?
我想使用选择器在我的视图控制器中调用函数,我想将通道号传递给函数。这需要是一个 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]];
方法说 withObject。不幸的是 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 ...
performSelector:
不应滥用于正常的方法调用。
为什么不直接调用方法呢?
[self.viewController getBusParams:self.bus.channelNumber];
如果您的 viewController
具有通用类型,请将其转换为正确的类型:
[(MyViewController *) self.viewController getBusParams:self.bus.channelNumber];
我想使用选择器在我的视图控制器中调用函数,我想将通道号传递给函数。这需要是一个 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]];
方法说 withObject。不幸的是 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 ...
performSelector:
不应滥用于正常的方法调用。
为什么不直接调用方法呢?
[self.viewController getBusParams:self.bus.channelNumber];
如果您的 viewController
具有通用类型,请将其转换为正确的类型:
[(MyViewController *) self.viewController getBusParams:self.bus.channelNumber];