【发布时间】:2013-07-13 00:24:04
【问题描述】:
我正在尝试使用 'withObject:' 通过选择器传递浮点数,但是它只接受对象。
有一些解决方案告诉我使用 [NSNumber numberWithFloat: ] 但是它会弄乱我的浮点值。我在测试浮点值之前和之后,事先我得到了诸如 0.0034324 之类的数字,而之后它们都是 0.0000000
[[self gameObjects] makeObjectsPerformSelector:@selector(update:) withObject: <what to put here>]];
提前致谢!
编辑*
这里是上下文
-(void) tick:(float)dt{
NSLog(@"%f",dt)
[[self gameObjects] makeObjectsPerformSelector:@selector(update:) withObject:[NSNumber numberWithFloat:dt]];
}
上面输出的数字不是0
但是从选择器方法......
- (void)update:(float)dt{
NSLog(@"%f",dt);
}
输出为0
【问题讨论】:
-
你能举出你看到 0.0000000 的例子吗?您应该解决这个问题,因为将浮点数包装在 NSNumber 中是正确的答案。你只是在实现中犯了一些错误。
-
确实;可以肯定的是,如果您认为自己得到了 0.00000,那么您将得到
floatValue的nil而不是实际数字。 -
显示
update:的声明。参数类型是什么?它不能是float类型,因为您需要将其传递给NSNumber。 -
这是不可能的,因为 Objective-C doesn't perform autoboxing。您要么必须自己通过其他方法执行此操作,请使用 NSInvocation 或使用描述的方法 here
-
NSNumber 不会“弄乱”你的浮动值,如果你做得对的话。问题是您没有在目标方法中接收 NSNumber,而是试图将指向 NSNumber 的指针解释为浮点数。
标签: objective-c