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