【问题标题】:arc4random_uniform output issuearc4random_uniform 输出问题
【发布时间】:2014-02-22 22:17:41
【问题描述】:

在 iOS Objetive-C 中,我试图获取用户在文本字段中键入的数字,以设置 C 中随机数生成函数的上限。

- (IBAction)pushTheButton2:(id)sender {
    u_int32_t upperBound = (u_int32_t) textField3.text;
    textField4.text = [NSString stringWithFormat:@"%d", arc4random_uniform(upperBound)];
}

输出是一个没有意义的巨大数字。为了测试函数是否有效,如果我硬编码 arc4random_uniform 函数中的实际上限,例如 arc4random_uniform(5),那么它就有效!

我认为这可能是某种文字转换,因此我尝试使用 u_int32_t 进行此操作,但仍无法输出正确的范围。

有人可以帮忙吗?谢谢

【问题讨论】:

  • NSTextField to uint16_t 的可能重复项
  • 其他人已经给你完整的答案了。将来,请尝试自己调试代码。在分配上界后设置一个断点,并检查该值。您应该知道类型转换和类型转换是两件不同的事情。当您将某些内容强制转换为另一种类型时,它不会将其转换,它只是将值“填充”到另一种类型的变量中,而不会发出编译器警告。您不能将 NSString 类型强制转换为任何整数值。您必须调用转换方法,如 intValue 或 integerValue,如下面的 2 个答案所述。

标签: ios objective-c cocoa random


【解决方案1】:

您当前正在获取文本的内存引用指针并将其用作上限。

尝试做这样的事情......

NSInteger upperBound = [textfield.text intValue];

这会将字符串转换为 int,然后您可以在 arc random 函数中使用。

【讨论】:

    【解决方案2】:

    要将 string 解析为 integer,您应该这样做:

    NSInteger upperBound = [textfield.text integerValue];
    

    【讨论】:

    • 为什么要投反对票? @Fogmeister,在你的回答中intValue 返回int。然后将其分配给NSInteger。我的答案不同,integerValue 返回NSInteger。差异确实很小,但在我看来,我的代码更干净。
    • 我没有投反对票。否决票与我无关。不像我猜是你投的反对票。大声笑
    猜你喜欢
    • 1970-01-01
    • 2012-06-15
    • 2011-08-16
    • 2011-07-29
    • 2012-09-21
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多