我正在做一个购物车教程:我有一个数组,该数组从文本字段收集输入,然后将其显示在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”。

为什么?

最佳答案

从苹果的文档:


#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,它可以正确处理这种情况。

10-08 05:51