ios - 在 XCode 中收到关于 NSMutableDictionary 键应该是 NSNumber 的警告

标签 ios objective-c xcode

所以我在 Xcode 6.3 项目中有以下内容,其中我有 _menuHeaderPositions 应该包含 menuHeaderIDNSNumber 的键代表contentOffset:

// _menuHeaderPositions is a NSMutableDictionary
// should be a NSNumber created from an NSUInteger
[_menuHeaderPositions  setObject:[NSNumber numberWithFloat:_runningYPosition] forKey:[NSNumber numberWithInteger:menuHeader.menuHeaderID]]; 

// so unsigned long because of complaints about int
firstButton.tag=(unsigned long)menuHeaderID; 
... later firstButton -> thisTap.view

// Works Fine
NSLog(@"you tapped me %lu", [_menuHeaderPositions objectForKey:[NSNumber numberWithInteger:  thisTap.view.tag]]); 

// THIS IS THE ISSUE
// Implicit Conversion loses integer precision: 'NSInteger' (aka long) to 'int'
NSNumber *pos=[_menuHeaderPositions objectForKey:[NSNumber numberWithInt:thisTap.view.tag]];

但是我得到了这个错误并且对这里发生的事情一无所知: 隐式转换会丢失整数精度:“NSInteger”(又名 long)到“int

我稍后可以访问正确的值作为 [pos floatValue] 但我如何让这个警告消失?

编辑1

尝试这个似乎没有用:

  NSNumber *pos=[_menuHeaderPositions objectForKey:[NSNumber numberWithInt:@(thisTap.view.tag)]];

最佳答案

tag 属性的类型为 NSInteger。您正在尝试将此 NSInteger 传递给需要 int 的方法 (numberWithInt:)。

你有两个选择:

  1. 使用NSNumber numberWithInteger:

    NSNumber *pos=[_menuHeaderPositions objectForKey:[NSNumber numberWithInteger:thisTap.view.tag]];
    
  2. 使用现代装箱:@(thisTap.view.tag)

    NSNumber *pos=[_menuHeaderPositions objectForKey:@(thisTap.view.tag)];
    

你也可以使用现代字典语法,这行就变成了:

NSNumber *pos = _menuHeaderPositions[@(thisTap.view.tag)];

关于ios - 在 XCode 中收到关于 NSMutableDictionary 键应该是 NSNumber 的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30670757/

相关文章:

ios - 将 Facebook 登录添加到 iOS 应用程序时出错

ios - 使用 iOS Swift 隐藏三个按钮中的一个按钮

ios - 如何使用 Facebook 获取用户的电子邮件?

ios - 在 Swift 中删除 WKWebView 附件栏

没有圆边的 Iphone 自定义 UITabBarItem

mysql - 绑定(bind)的C mysql准备语句问题

xcode - 如何获取 Xcode Bot "Run Script"触发器的提交 SHA?在 Github 上更新测试状态

ios - 删除未引用的未使用的持久数据

ios - 如何更改 iCarousel 库的包装属性?

ios - Xcode的iOS模拟器打不开