2014-02-22 47 views
0

iOS中Objetive-C,我试图让用户在文本字段中键入数字来设置一个随机数生成函数的上界在Carc4random_uniform输出问题

- (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但仍然不输出正确的范围。

有人可以帮忙吗?谢谢

+0

可能重复[到的NSTextField UINT16 \ _t](http://stackoverflow.com/questions/6600122/nstextfield-to- uint16-t) –

+0

其他人已经给你完整的答案。将来,请尝试自己调试代码。分配upperBound后设置一个断点,并检查该值。你应该知道,类型转换和类型转换是两个不同的东西。当你将类型转换为另一种类型时,它不会将其转换,它只是将值填充到其他类型的变量中,而不会产生编译器警告。你不能输入一个NSString到任何整数值。您必须调用一个转换方法,如intValue或integerValue,如以下2个答案所解释的。 –

回答

-1

为了解析整数你应该做的:

NSInteger upperBound = [textfield.text integerValue]; 
+0

为什么要投票? @Fogmeister,在你的答案'intValue'中返回'int'。然后你将它分配给'NSInteger'。我的答案不同,'integerValue'返回'NSInteger'。差别确实很小,但在我看来,我的代码更加干净。 – RaffAl

+1

我没投过票。倒票与我无关。不像我认为是来自你的投票。大声笑 – Fogmeister

0

您目前正在采取文本的内存引用指针,并使用它作为上限。

尝试做这样的事情,而不是...

NSInteger upperBound = [textfield.text intValue]; 

这将字符串转换为一个int,然后可以在电弧随机函数使用。