2011-06-20 69 views
2

我試圖獲得iOS編程的基礎知識。我有一個應用程序,當我點擊一個按鈕時顯示一個隨機數。至少,這就是我想要的。但是,它似乎並沒有解決問題。方法返回0而不是我分配給變量的編號

我有以下基本的方法,它應該將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

您是否收到任何警告(特別是關於無法識別的選擇器的警告)? – 2011-06-20 11:51:19

+0

完全沒有警告/問題:( – cabaret

+0

JeremyP發現了這個錯誤,強烈建議你總是用下劃線開始你的實例變量,這樣可以避免這種錯誤,並且在訪問實例變量而不是屬性時可見。即使沒有錯誤,有人發現你的代碼訪問一個實例變量時,如果沒有下劃線,總是不確定這是你想做什麼,或者它是否是一個bug。 – gnasher729

回答

5

它不會返回1.34,我不明白它爲什麼不。有人可以清除它嗎?

幾乎可以肯定,您尚未分配並初始化myModel對象。您可以發送消息到nil而不會崩潰,但返回值將爲0.

arc4random()不需要種子。

編輯

你的初始化代碼看起來不錯,但你不叫誠信,在你myBtnPressed:方法,需要

[myLabel setText:[NSString stringWithFormat:@"%g/15", [[self myModel] generateRandomNumber]]]; 
+0

更新我的帖子與myModel對象的初始化。 – cabaret

+0

它仍然看起來 – JeremyP

+0

我很慢; D更新了。 – cabaret

2

您是否正在實例化模型類型的對象?我問,因爲你說你已經在myModel.h(可能是一個錯字)宣佈函數。

是的 - 獲得一個隨機數0和X之間:

int rand = arc4random() % X; 

而且你不需要種子發生器。更多

// define this somewhere 
#define ARC4RANDOM_MAX  0x100000000 

// and then use this 
double val = floorf(((double)arc4random()/ARC4RANDOM_MAX) * 15.0f); 

要返回雙0到15之間。

+0

非常感謝。如何讓它返回一個隨機''雙'雖然?它只返回整數atm,但我想有數字像.. 14.23等 – cabaret

+0

非常感謝您的編輯! – cabaret

0

你有沒有分配/創建基於myModel對象?

我猜你沒有,而你只是試圖使用類作爲'方法'類,不存儲任何東西(我知道有一個名字,但我是自我因此我的術語是非常可怕的!)

可以在objective-c中做到這一點,但你必須使用不同的語法。使用「+」代替減號,使用「+」:

+(double)generateRandomNumber; 

現在您的方法應該可用!

相關問題