【问题标题】:passing float variable as parameter将浮点变量作为参数传递
【发布时间】:2010-10-16 09:07:23
【问题描述】:

我正在尝试使用 float 参数编写一个方法并使用 performSelector` 调用它,但这样做时出错。以下是我的代码:

[sender performSelector:selector withObject:progress/total];

这里的进度和总数都是float变量。

我正在尝试在不同的类中调用以下方法:

-(void) updateProgress:(float)fl {
    
}

【问题讨论】:

    标签: ios objective-c iphone objective-c-runtime


    【解决方案1】:

    您需要传递一个真实的对象,而不是 int 或 float 等基本类型之一。

    将其包装成NSNumber 对象:

    [sender performSelector:selector withObject:[NSNumber numberWithFloat:progress/total]];
    
    -(void) updateProgress:(NSNumber *)aProgress {
       float fProgress = [aProgress floatValue];
    }
    

    【讨论】:

    • 这也是对的,你也可以试试这个[sender performSelector:selector withObject:(float)(progress/total)];
    • @GhostRider:不。浮点数与 NSObject 完全不同。
    • 对不起,您可以将其保存在一个字符串中,然后将该字符串传递给对象,然后将其转换,您的方式也很好,但我从不尝试使用 nsnumber 我总是保存在字符串中并选择 [string floatValue] 需要时
    • 你可以对字符串中的任何内容进行编码,只是没有意义,而且很容易丢失精度。
    【解决方案2】:

    这是因为-performSelector:withObject: 仅适用于Objective-C 对象float 不是其中之一。

    为什么不直接使用

    [(TheClass*)sender updateProgress:progress/total];
    

    ?

    【讨论】:

    • 变量的命名让我觉得他想从后台线程更新 UI,这使得必须调用主线程。
    • 也许他正在尝试使用 -performSelector:withObject:afterDelay
    • 你是正确的 Eiko,这正是我想要做的,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 2018-05-23
    • 2018-05-25
    • 2018-02-17
    • 1970-01-01
    相关资源
    最近更新 更多