[OBJ-C] [iOS]从NSArray获取浮点 - 问题

Mar*_*ark 1 objective-c nsarray iphone-sdk-3.0 ios

我最近遇到了一个问题.这是事情,我正在尝试从NSArray获取一个浮动对象来保存它,而我所能得到的只是(null).显然不是我想要收到的东西.看一下代码片段:

h = [[NSMutableArray alloc] initWithObjects:[NSNumber numberWithFloat:1.0],[NSNumber numberWithFloat:1.0],[NSNumber numberWithFloat:1.0], nil];
x = [[NSMutableArray alloc] initWithObjects:[NSNumber numberWithFloat:1.0],[NSNumber numberWithFloat:2.0], nil]; 
y = [[NSMutableArray alloc] init];

int step = 15; // That is just a random value, will depend on size of h and x.

for (int i = 0; i < step; ++i) {
   NSLog(@"step = %i", i);


 NSMutableArray *xTemp = [[NSMutableArray alloc] initWithArray:x];
 NSMutableArray *hTemp = [[NSMutableArray alloc] initWithArray:h];

 for (int j = 0; j < 3; ++j) {

   float xToMul = [[xTemp objectAtIndex:j] floatValue];
   float hToMul = [[hTemp objectAtIndex:(j+i)] floatValue];

   NSLog(@"xToMul = %@", xToMul);
   NSLog(@"hToMul = %@", hToMul);


 }

   NSLog(@"\n");

}
Run Code Online (Sandbox Code Playgroud)

结果是:

xToMul = (null)
hToMul = (null)
Run Code Online (Sandbox Code Playgroud)

而我所需要的就是做一些简单的数学运算.

谢谢.先生

Ste*_*her 5

这是你的问题:

float xToMul = [[xTemp objectAtIndex:j] floatValue]; float hToMul = [[hTemp objectAtIndex:(j+i)] floatValue];
NSLog(@"xToMul = %@", xToMul); NSLog(@"hToMul = %@", hToMul);
Run Code Online (Sandbox Code Playgroud)

%@用于支持-description的对象.float根本不是一个对象.此代码发送浮动a -description消息,它无法响应.

有两种方法可以解决这个问题.

第一种是制作xToMul和hToMul对象而不是浮点数并保留格式字符串.

id xToMul = [xTemp objectAtIndex:j];
id hToMul = [hTemp objectAtIndex:(j+i)];
NSLog(@"xToMul = %@", xToMul);
NSLog(@"hToMul = %@", hToMul);
Run Code Online (Sandbox Code Playgroud)

第二个是将它们保留为浮点数但修复格式字符串:

float xToMul = [[xTemp objectAtIndex:j] floatValue];
float hToMul = [[hTemp objectAtIndex:(j+i)] floatValue];
NSLog(@"xToMul = %f", xToMul);
NSLog(@"hToMul = %f", hToMul);
Run Code Online (Sandbox Code Playgroud)

如果你打算用浮点数做数学运算,你可能想选择这个选项.

另一个有趣的观点是这个循环:

 for (int j = 0; j < 3; ++j) {
Run Code Online (Sandbox Code Playgroud)

这将使用三个值逐步执行j:0,1和2.这对应于NSArray中的第一个,第二个和第三个项目.你有两个项目x和三个h.我猜这只是原始代码的简化,但在这两种情况下都是简短的.j为2 + 1将访问第4项h,而j为2将访问第3项x.