【问题标题】:CGFloat getting modified went sent to viewController修改后的 CGFloat 已发送到 viewController
【发布时间】:2012-01-22 05:35:23
【问题描述】:

这真的很奇怪。我从我的视图中获取一个 CGFloat 值并将其发送到我的 viewController,它会将它传递给我的音频引擎。但是,CGFloat 会在视图和视图控制器之间以某种方式进行修改。完全被难住了。

这是视图中的方法

-(void)mod:(CGFloat)value
{
    if(value < 0) value = 0.;
        if(value > self.bounds.size.width - 10)value =  self.bounds.size.width - 10.f;

            value =  value / (self.bounds.size.width - 10.f) ;
            NSLog(@"value %g", value);   ///prints a value between 0.0 - 1.0
            [viewController mod:value forVoice:voiceToPlay];
}

打印一个介于 0.0 - 1.0 之间的值

然后在我的 viewController 这个方法接收它...

-(void)mod:(CGFloat)value forVoice:(NSUInteger)voice
{
    NSLog(@"mod in view control %g", value);

    [audioController mod:value forVoice:voice];
}

这会打印完全错误的数字,例如 1.0842e-19, 2, -2

这可能很简单,但我不知道它是什么!谢谢你的帮助。

【问题讨论】:

    标签: objective-c ios cocoa viewcontroller cgfloat


    【解决方案1】:

    我是初学者,所以我不确定,但是你真的可以改变方法的输入值并将其重新发送到另一个方法吗?你不应该在你的 mod: 方法中创建另一个 CGFloat,然后将该值发送到 viewController 吗?

    【讨论】:

    • -(void)mod:(CGFloat)value { CGfloat anotherValue = value; // [viewController mod:anotherValue forVoice:voiceToPlay];
    • @gschandler 感谢您的纠正 - 我正在采取婴儿步骤,但我正在到达那里:)
    【解决方案2】:

    我猜当你编译这个程序时,你会得到一些警告(除非你禁用它们)。修复它们,这就会消失。

    具体来说,确保 (a) mod: forVoice:viewController.h 中声明(并且声明与实现匹配),以及 (b) 在调用之前,viewController.h 包含在您的视图的实现文件中.

    【讨论】:

    • 好吧,我原以为就是这样,但实际上我现在遇到了更多错误。我为我的 viewController(它实际上是 UIViewController 的子类)导入了 .h,但现在编译器告诉我它是“未知类型”。
    • 当我包含我的 viewController 的标题时,它会为我的大多数其他类创建错误,说它们是“未知类型”。我想知道这是否与某种循环引用或类似的东西有关。
    • 有可能;没有看到错误是很难说的。
    猜你喜欢
    • 2012-12-15
    • 1970-01-01
    • 2015-09-01
    • 2019-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多