我正在尝试降低iOS编程的基础知识。当我点击按钮时,我有一个显示随机数的应用程序..至少,这就是我想要做的。但是,它似乎没有成功。
我有以下基本方法,应将myLabel
的文本设置为generateRandomNumber
的返回值。但是,它总是返回0.我认为我在这里使用的语法是正确的,因为它适用于注释部分:
-(IBAction)myBtnPressed:(UIButton *)sender
{
//[myLabel setText:@"test"];
//[myLabel setText:[NSString stringWithFormat:@"%g / 15", 3.14]];
[myLabel setText:[NSString stringWithFormat:@"%g / 15", [myModel generateRandomNumber]]];
}
最后一行设置标签显示0/15
。但是,在我的模型中,我有以下代码(现在是'静态'):
-(double)generateRandomNumber
{
randomNumber = 1.34;
return randomNumber;
}
它没有返回1.34而且我不明白为什么它没有。有人可以解决这个问题吗?
更新 这是我的viewcontroller.m文件的代码:
#import "myViewController.h"
@implementation myViewController
-(MyModel *)myModel
{
if (! myModel) {
myModel = [[MyModel alloc] init];
}
return myModel;
}
-(IBAction)myBtnPressed:(UIButton *)sender
{
[myLabel setText:[NSString stringWithFormat:@"%g / 15", [myModel generateRandomNumber]]];
}
@end
另外,最后,我想让generateRandomNumber
返回0到15之间的随机数。我该怎么做?会是一个简单的界限:
int x = arc4random() % 16;
为此工作?或者我是否必须以某种方式播种它,因此在运行应用程序时它并不总是返回相同的值?
提前致谢。
答案 0 :(得分:5)
它没有返回1.34而且我不明白为什么它没有。有人可以解决这个问题吗?
几乎可以肯定,您尚未分配和初始化myModel
对象。您可以向nil
发送消息而不会崩溃,但返回值将为0.
arc4random()
不需要种子。
修改强>
您的初始化代码看起来没问题,但您没有调用int,在您的myBtnPressed:
方法中,您需要
[myLabel setText:[NSString stringWithFormat:@"%g / 15", [[self myModel] generateRandomNumber]]];
答案 1 :(得分:2)
您是否在实例化模型类型的对象?我问,因为你说你在myModel.h
声明了这个功能(可能是一个错字)。
是的 - 获得0到X之间的随机数:
int rand = arc4random() % X;
你不需要为发电机播种。
要在0到15之间返回一个双精度数:
// define this somewhere
#define ARC4RANDOM_MAX 0x100000000
// and then use this
double val = floorf(((double)arc4random() / ARC4RANDOM_MAX) * 15.0f);
答案 2 :(得分:0)
你有没有分配/创建myModel对象?
我猜你没有,而你只是试图将这个课程用作一个不存储任何东西的“方法”课程(我知道它有一个名字,但我自学成才所以我的术语非常糟糕!)
你可以在objective-c中执行此操作,但您必须使用不同的语法。而不是使用减号作为方法声明,使用“+”:
+(double)generateRandomNumber;
现在你的方法应该可用了!