arrays - 警告 "Implicit conversion loses integer precision..."

标签 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];
}

在第 2 行(int selectedItemIndex...),我收到黄色警告:隐式转换会丢失整数精度:'NSInteger'(又名'long')到'int'。

为什么?

最佳答案

来自苹果的文档:

When building 32-bit applications, NSInteger is a 32-bit integer. A 64-bit application treats NSInteger as a 64-bit integer.

#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
#else
typedef int NSInteger;
#endif

更新:

详细说明:

[shoppingListTableView selectedRow] 返回一个 NSInteger,并且您正在构建一个 64 位应用程序,因此它实际上是一个 long

您可以使用long selectedItemIndex而不是int selectedItemIndex来抑制此警告,但在构建32位版本时该警告会再次出现。

更好的方法是使用 NSInteger selectedItemIndex,它可以正确处理这种情况。

关于arrays - 警告 "Implicit conversion loses integer precision...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8813799/

相关文章:

perl - 你能在 Perl 中强制标量或数组引用成为数组吗?

c - 将多维数组传递给c中的函数会导致堆栈溢出

php - 将 WordPress 帖子元转换为 PHP 数组

cocoa - 有没有办法让 NSAnimation "Begin from current state"就像在 iPhone 上一样?

objective-c - 图像objective-c的尺寸

java - ClassLoader 引用未知路径

arrays - 可见弃用警告...?

javascript - 在用户输入的字符串中搜索数组的任意值

cocoa - 在 cocoa 中将 NSMutableArray 写入文件时出现问题

android - 检查 sdk 版本后缺少 PendingIntent 可变性标志给出警告