警告"隐式转换损失整数precision ..." [英] Warning "Implicit conversion loses integer precision..."

查看:132
本文介绍了警告"隐式转换损失整数precision ..."的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我做一个购物车的教程:我有一个从文本字段输入收集的数组,然后显示在NSTableView的。您可以检查的项目,并从列表中删除。我只想显示,如果事情被选中警告。所以,我有这样的:

   - (IBAction为)removeItemFromShoppingList:(ID)发送{
        INT selectedItemIndex = [shoppingListTableView selectedRow]
        如果(selectedItemIndex == -1)回报;
        NSAlert *警报= [[NSAlert的alloc]初始化];
        ...
        [提醒runModal]
        [警报发布];
}

在这里2号线( INT selectedItemIndex ... )我得到一个黄色预警:隐式转换损失整数precision:NSInteger的(又名长),以'廉政'。

为什么?


解决方案

从苹果公司的文件:


  

在构建32位应用程序,NSInteger的是一个32位整数。 64位应用程序会把NSInteger的为64位整数。


 #如果__LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
长期的typedef NSInteger的;
#其他
的typedef诠释NSInteger的;
#万一

更新:

详细讲解:

[shoppingListTableView selectedRow] 返回一个NSInteger的,而你正在建设一个64位应用程序,因此它实际上是一个

您可以使用长selectedItemIndex 而不是 INT selectedItemIndex 共进晚餐preSS此警告,但警告构建32位版本时,会再次出现。

有一个更好的办法是使用 NSInteger的selectedItemIndex ,它正确地处理这种情况。

I am doing a shopping cart tutorial: I have an array that collects input from a text field, and then displays it in the NSTableView. You can check an item, and remove it from the list. I want to display a warning only if something is checked. So, I have this:

    -(IBAction)removeItemFromShoppingList:(id)sender {
        int selectedItemIndex = [shoppingListTableView selectedRow];
        if (selectedItemIndex == -1) return;
        NSAlert *alert = [[NSAlert alloc] init];
        ...
        [alert runModal];
        [alert release];
}

On line 2 here (int selectedItemIndex...) I get a yellow warning: Implicit conversion loses integer precision:’NSInteger’ (aka ‘long’) to ‘int’.

Why?

解决方案

From apple's documentation:

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

UPDATE:

Explain in detail:

[shoppingListTableView selectedRow] returns a NSInteger, and you are building an 64-bit application, so it is in fact a long.

You can use long selectedItemIndex instead of int selectedItemIndex to suppress this warning, but the warning appears again when building 32-bit version.

A better way is using NSInteger selectedItemIndex, which handles this case correctly.

这篇关于警告"隐式转换损失整数precision ..."的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆