2012-09-13 25 views
1

嗨,我有一點問題。我的程序不記得通過單擊第一個按鈕生成的隨機值。但我想在另一個按鈕中使用該值,並且存在問題。如果我嘗試返回這個值,程序會說這個方法不應該返回值。這裏是我的代碼看起來像:程序不記得值/不能返回值(XCode)

int randomprocess; 
- (IBAction)button:(id)sender { 
randomprocess = rand() % 3; 
// Do something } 
- (IBAction)b1:(id)sender { 
if (randomprocess == 0) { 
    // Do something 
} else { 
    // Do something else 
} 

如果我不會寫第一行,第二個按鈕將無法識別「randomprocess」。現在,當我宣佈它仍然是零或任何數字,我設置它相等。

+0

你調用'按鈕:'首先,之後'b1:'?在聲明它們時初始化變量也是一件好事。 – Alexander

+0

如果您直接從源代碼複製並粘貼,則當您爲其分配值時,您的錯誤是變量中的拼寫錯誤,randomproces = rand()%3;應該是隨機過程我想象? – Andrei0427

+0

@ Anrei0427不,沒有那個拼寫錯誤就在這裏,我很抱歉。我會在一秒鐘內解決它。 – TomasJ

回答

2

也許,你已經宣佈與非常相同名稱的伊娃/屬性,一個覆蓋全局變量。只使用全球變量一個iVar。

的聲明int randomprocess;的方法或對象頭部外它對一個「正常」的全局C變量。

伊娃是在有關的對象本地變量。一個物業(通常)是具有某些訪問者的iVar。 如果你已經同時聲明瞭一個全局變量和一個局部變量(resp,一個iVar),全局變量是不可見的,但是被本地變量覆蓋。

總的來說這是一個壞主意,使用全局變量。如果必須,請將其設爲靜態。更好的是使用一個iVar。

編輯 要使一個屬性,你的頭應該是這樣的:

@interface myclass 
@property (nonatomic,assign) int randomprocess; 
// ... 
@end 

而且對於實現:

@implementation myclass 
@synthesize randomprocess; // only for XCode < 4.4 needed 
// ... 

- (IBAction)button:(id)sender { 
    self.randomprocess = rand() % 3; 
// Do something  
} 
- (IBAction)b1:(id)sender { 
    if (self.randomprocess == 0) { 
    // Do something 
    } else { 
    // Do something else 
    } 
// 
} 
+0

這是一條評論,而不是答案。 – trojanfoe

+0

你說得對。但是,我怎麼能使用或返回第一個按鈕的值,並在第二個按鈕時使用它,當我不能給他們同名時? – TomasJ

+0

當我刪除全局變量時,我的第二個按鈕不知道什麼是「randomprocess」。當我嘗試返回它時,程序說void方法不應該返回值。 – TomasJ

1

還是應該只需要聲明的變量這樣

@interface myclass { 
int randomprocess; 
} 

inside .h fil E或:

@implementation myclass { 
int randomprocess; 
} 

.m文件裏面

這將宣告內部變量(伊娃)沒有財產

如果你會做這裏面.m文件(第二樣品)可用這個變量將只在當前文件

如果你會做這樣的.h文件(第一個樣品)內部的變量將可用於當前的.m和亞類