所以我在 Xcode 6.3 项目中有以下内容,其中我有 _menuHeaderPositions
应该包含 menuHeaderID
和 NSNumber
的键代表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:
)。
你有两个选择:
使用
NSNumber numberWithInteger:
NSNumber *pos=[_menuHeaderPositions objectForKey:[NSNumber numberWithInteger:thisTap.view.tag]];
使用现代装箱:
@(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/