jan*_*neh 12 arrays cocoa warnings nstableview
我正在做一个购物车教程:我有一个数组从文本字段收集输入,然后在NSTableView中显示它.您可以检查项目,并将其从列表中删除.我只想在检查某些内容时显示警告.所以,我有这个:
-(IBAction)removeItemFromShoppingList:(id)sender {
int selectedItemIndex = [shoppingListTableView selectedRow];
if (selectedItemIndex == -1) return;
NSAlert *alert = [[NSAlert alloc] init];
...
[alert runModal];
[alert release];
}
Run Code Online (Sandbox Code Playgroud)
在第2行(int selectedItemIndex...)()我得到一个黄色警告:隐式转换失去整数精度:'NSInteger'(又名'long')到'int'.
为什么?
Fan*_*aan 14
来自apple的文档:
构建32位应用程序时,NSInteger是一个32位整数.64位应用程序将NSInteger视为64位整数.
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
#else
typedef int NSInteger;
#endif
Run Code Online (Sandbox Code Playgroud)
更新:
详细解释:
[shoppingListTableView selectedRow]返回一个NSInteger,你正在构建一个64位的应用程序,所以它实际上是一个long.
您可以使用long selectedItemIndex而不是int selectedItemIndex禁止此警告,但在构建32位版本时会再次出现警告.
更好的方法是使用NSInteger selectedItemIndex,正确处理这种情况.
因为您的变量属于类型,int并且您尝试将类型变量的值复制NSInteger到其中.一个NSInteger可以比保持较大的值int就可以了,所以你得到一个警告溢出是可能的.可能最简单的解决方法是int改为NSInteger.(如果要复制变量的值以对其运行测试,通常应使用相同类型的变量.)
使用
int selectedItemIndex = (int)[shoppingListTableView selectedRow];
Run Code Online (Sandbox Code Playgroud)
代替
int selectedItemIndex = [shoppingListTableView selectedRow];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17607 次 |
| 最近记录: |