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

Using NSInteger for type id in NSDictionary objectForKey

我正在尝试在 dictionary 中插入键值 indexPath.row。当我只做 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 时,它​​仍然给我同样的错误。

A NSDictionary 只能处理对象,使用 NSInteger 作为键的简单方法是将其包装在 NSNumber 对象中:

[self.myDict objectForKey:[NSNumber numberWithInteger:indexPath.row]];

此外,使用 NSNumber 的更好方法是使用文字,例如:

[self.myDict objectForKey:@(indexPath.row)];

有关文字的更多信息 here

我遇到了这个问题,但是条件不是很相似。我试图在块中传递 NSInteger 但参数是 id 类型。但是编译器告诉我 'NSInteger'(又名 'long')到 'id' 的隐式转换在 ARC 中是不允许的,然后我注意到 id 类型由 Objective - C 定义,但 NSInteger 只是一个基本类型,这意味着不能转换为 Objective-C 类型参数。

我认为有两种方法可以解决这个问题。

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