【问题标题】:Why am I getting this compiler warning?为什么我会收到此编译器警告?
【发布时间】:2010-12-27 00:49:43
【问题描述】:

我在使用以下代码时收到编译器警告:

for(int i=0; i<[mutableTempArray count]; i++){
  //...
  [tempInfoDictionary setValue:i forKey:@"tag"];
  //...
}

警告是:

传递 'setValue:forKey:' 的参数 1 使指针从整数而不进行强制转换

我在这里做错了什么?

【问题讨论】:

    标签: objective-c ios compiler-warnings


    【解决方案1】:

    Objective-C 中的集合只能保存 对象,因此您需要将 i 包装在 NSNumber 对象中。

    i本身是基本类型,不是对象,所以不能放在集合对象里面。

    setValue:forKey: 的第一个参数应该是指针类型,i 本身显然不是。

    我建议在NSDictionary 上使用setObject:forKey: 方法而不是setValue:forKey:,因为它可以更好地说明您的意图。您不仅存储了一个,还存储了一个对象

    [tempInfoDictionary setObject:[NSNumber numberWithInt:i] forKey:@"tag"];
    

    【讨论】:

    • setValue:forKey:setObject:forKey: 之间的区别起初有点令人困惑。正如@Jacob 所说,一个区别是setObject:forKey: 只接受对象。但这并不意味着您可以使用setValue:forKey:NSMutableDictionary 中设置非对象值; setValue:forKey:NSObject 子类通用的方法,主要用于按名称设置属性。在集合类中,行为更具体一些;对于NSMutableDictionary,它是setObject:forKey: 的同义词。
    • @Seamus Campbell 感谢您的评论!
    【解决方案2】:

    您正在尝试将 int 放入对象数组中,但它需要 id 即指针。试试[tempInfoDictionary setValue:[NSNumber numberWithInt:i] forKey:@"tag"];

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多