0

我花了很多时间试图找到一个解决方案,所以如果它在某个地方并且我错过了它,我很抱歉......

在.h

    @property (nonatomic, strong) NSArray *physicalMan;
    -(int) getManeuverRating:(int *) value;

在.m

    physicalMan = [[NSArray alloc] initWithObjects:@"Grip-Hold", @"Strike", @"Fall", @"Response", nil];

    NSLog(@" The second element is: %@", [physicalMan objectAtIndex:1]);
    NSLog (@" This is the index location of Grip-Hold: %i", [physicalMan indexOfObject:@"Grip-Hold"]);

    [self getManeuverRating:[physicalMan indexOfObject:@"Grip-Hold"]];
}

-(int) getManeuverRating:(int *) value
{
    int a = *value;
    return  a + 1;
}

NSLogs 可以在正确的值下正常工作,这就是为什么我对为什么该功能不起作用感到困惑的原因。编译器警告说“不兼容的整数到指针转换将'NSUInteger'(又名'unsigned int')发送到'int *'类型的参数”我已经尝试删除*并且我试图找到其他数据类型,并转换数据类型,我无法让任何东西正常工作。请帮助或指出我正确的方向......我做错了什么?我错过了什么?

4

2 回答 2

1

indexOfObject:方法NSArray返回一个NSUInteger,而不是一个int*。将 an 传递int给采用的方法int*是不正确的:相应内存位置的值将无效。

getManeuverRating:您应该按如下方式更改方法:

-(int) getManeuverRating:(NSUInteger) value
{
    return  value + 1;
}
于 2013-08-29T00:44:14.673 回答
1

你不是指向一个int ...你应该做这个函数

-(NSInteger)getManeuverRating:(NSInteger) value
 {
    NSinteger a = value;
    return a + 1;
 }

如果这给您带来问题,您还应该尝试在初始函数中转换整数......

所以而不是

 [self getManeuverRating:[physicalMan indexOfObject:@"Grip-Hold"]];

 NSInteger index = (NSInteger) [physicalMan indexOfObject:@"Grip-Hold"];
 [self getManeuverRating:index];

您应该使用 NSInteger 而不是 int 仅仅是因为用objective-c语法编写是好的。但它只是一个包装。你也可以让它接受并返回一个 NSUInteger 而不是施放它。

你可以做的另一件现代化的事情(这是一个旁白)是像这样声明你的数组......

 NSArray * physicalMan = @[@"Grip-Hold", @"Strike", @"Fall", @"Response"];
于 2013-08-29T00:45:03.683 回答