当选择一行时,我正在推送到另一个WKInterfaceController
,但我似乎无法将rowIndex
作为我想要执行的新控制器的上下文传递。
// Push to next controller and pass rowIndex as context
- (void)table:(WKInterfaceTable *)table didSelectRowAtIndex:(NSInteger)rowIndex {
[self pushControllerWithName:(NSString *)@"ZoomPokeController"
context:rowIndex];
}
此代码提供错误
不兼容的整数到指针转换发送NSInteger:ARC不允许将'NSInteger'(又名'int')隐式转换为'id'。
我可以将context
更改为nil并且构建成功但当然我没有上下文。我已经看了一下迄今为止帮助我很多的类文档以及关于stackoverflow的类似问题,但我不知道怎么写这个。谢谢你的帮助。
答案 0 :(得分:2)
错误
"implicit conversion of 'NSInteger' (aka 'int') to 'id' is disallowed with ARC."
显然,您要将NSInteger
作为参数传递给id
的方法。
在下面的第二个参数中需要id
个对象。
[self pushControllerWithName:(NSString *)@"ZoomPokeController" context: rowIndex];
在@ fabian789的帮助下,现在很明显,在 WKInterfaceController Class Reference
该方法需要id
个对象作为第二个参数。
要在其中传递整数,您可以将NSInteger
转换为NSNumber
并传入第二个参数。
- (void)table:(WKInterfaceTable *)table didSelectRowAtIndex:(NSInteger)rowIndex {
NSNumber *rowValue = [NSNumber numberWithInteger:rowIndex];
[self pushControllerWithName:@"ZoomPokeController" context: rowValue];
}
然后,您可以在目标控制器中通过在上下文中调用integerValue
来获取行索引。
答案 1 :(得分:1)
您发送的参数类型错误。将rowIndex
投射到int
试试这个:
- (void)table:(WKInterfaceTable *)table didSelectRowAtIndex: (NSInteger) rowIndex {
NSNumber *val = [NSNumber numberWithInteger: rowIndex]
[self pushControllerWithName:@"ZoomPokeController" context: val];
}
希望这有帮助...:)
答案 2 :(得分:0)
错误清楚地说明你做错了什么,你只是将一个NSInteger类型发送给一个整数,尝试将上下文参数声明为NSInteger
或者像这样使用它,
[self pushControllerWithName:(NSString *)@"ZoomPokeController" context: (int)rowIndex];
但早期方法更有效