我正在做一个购物车教程:我有一个数组,该数组从文本字段收集输入,然后将其显示在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
,它可以正确处理这种情况。