发送nsinteger的指针转换不兼容整数

时间:2014-12-23 07:13:03

标签: ios objective-c swift watchkit wkinterfacetable

当选择一行时,我正在推送到另一个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的类似问题,但我不知道怎么写这个。谢谢你的帮助。

3 个答案:

答案 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个对象作为第二个参数。

enter image description here

要在其中传递整数,您可以将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];

但早期方法更有效