传递参数使得指针来自整数而没有强制转换

时间:2010-06-28 16:34:43

标签: objective-c ipad

有谁知道我为什么会收到以下错误:

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath;
{
 id result = (Possession *)[possessions objectAtIndex:[indexPath row]];

 [result setRowSwapped:TRUE]; //Passing argument makes pointer from integer without a cast
}

//This is the property on the possession object.  I just want to set it as true thats it
@property (nonatomic) bool *rowSwapped;

3 个答案:

答案 0 :(得分:1)

TRUE是一个数字(等于1的值),并且setRowSwapped似乎期望某种指针作为参数。因此编译器正在将int值1转换为指针,这是一个警告,因为这几乎不正确,如果它是正确的并且你知道你在做什么,你使用了一个显式的强制转换,这也避免了警告。你没有使用强制转换,你可能期望该方法需要一个布尔值作为参数,这似乎是不正确的。

BTW,因为这是Objective-C,你不应该在Objective-C中使用TRUE / FALSE,而是使用YES / NO。区别在于TRUE / FALSE类型为bool(全部小写,与Mac上的_Bool或boolean_t相同),并且通常类型为int和4字节(至少在PPC和Intel上,对于其他Apple设备可能不是这样) ,像iPad)。 YES和NO的类型为BOOL(全部为大写),此类型在PPC上为4字节,在Intel上为1字节。因此bool和BOOL并不总是相同的,并且在一些非常罕见的情况下,这确实会引起问题。所以你不应该混合它们。在Obj-C代码中使用BOOL和YES / NO,在C代码中,使用bool,boolean_t或_Bool和TRUE / FALSE。

答案 1 :(得分:0)

您需要向我们展示您的setRowSwapped:例程的定义,但我认为您在定义和使用方面存在不匹配。您是否将该方法设为BOOL *参数?无论如何,输入变量id有点奇怪 - 你在这方面的目标是什么?

答案 2 :(得分:0)

我使用的是bool而不是BOOL。