我试图在indexPath.row
中插入dictionary
的键值。当我执行indexPath
(没有.row
)时,它可以正常工作。但是当我添加.row
时,它会给我一个错误说:
Implicit conversion of 'NSInteger' (aka 'long') to 'id' is disallowed with ARC
Incompatible integer to pointer conversion sending 'NSInteger (aka 'long') to paramater of type 'id'
这是我的代码:
[self.myDict objectForKey:indexPath.row];
然后当我在它的末尾添加integerValue时,它仍然给我同样的错误。
答案 0 :(得分:6)
NSDictionary
只能处理对象,使用NSInteger
作为关键字的简单方法是将其包装在NSNumber
对象中:
[self.myDict objectForKey:[NSNumber numberWithInteger:indexPath.row]];
此外,使用NSNumber的更好方法是使用文字,例如:
[self.myDict objectForKey:@(indexPath.row)];
有关文字here的更多信息。
答案 1 :(得分:1)
我遇到了这个问题,但情况并不那么相似。我想在块中传递NSInteger
,但参数是id
类型。但是编译器告诉我不允许使用ARC 将'NSInteger'(又名'long')隐式转换为'id',然后我注意到id
类型是由Objective-C定义的,但NSInteger只是一个BASE TYPE,意味着无法转换为Objective-C类型参数。
我认为您有两种方法可以解决此问题。
NSNumber
类型,然后可以使用NSInteger变量的值。(使用@()
语法糖欢迎编程人员)