方法返回0而不是我赋给变量的数字

时间:2011-06-20 11:45:29

标签: iphone objective-c ios random

我正在尝试降低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;

为此工作?或者我是否必须以某种方式播种它,因此在运行应用程序时它并不总是返回相同的值?

提前致谢。

3 个答案:

答案 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);

random-thoughts-rand-vs-arc4random.html了解更多信息。

答案 2 :(得分:0)

你有没有分配/创建myModel对象?

我猜你没有,而你只是试图将这个课程用作一个不存储任何东西的“方法”课程(我知道它有一个名字,但我自学成才所以我的术语非常糟糕!)

可以在objective-c中执行此操作,但您必须使用不同的语法。而不是使用减号作为方法声明,使用“+”:

+(double)generateRandomNumber;

现在你的方法应该可用了!