在NSDictionary objectForKey中使用NSInteger作为类型id

时间:2015-03-24 18:17:25

标签: ios objective-c nsdictionary nsinteger

我试图在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时,它仍然给我同样的错误。

2 个答案:

答案 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类型参数。

我认为您有两种方法可以解决此问题。

  1. 不要将NSInteger类型作为参数传递给Objective-C类型。(在方法和块中以及所有其他可以传递参数的方法)
  2. 可以将NSInteger转换为Objective-C类型的NSNumber类型,然后可以使用NSInteger变量的值。(使用@() 语法糖欢迎编程人员)