2013-01-01 40 views
-2

我試着顯示一個字隨手拈上的行動從我的陣列如何隨機化的話

伊夫看着Randomize words但仍然沒有得到它的工作。

我的標籤文字_answer

在我viewDidLoad中

NSArray *words = [NSArray arrayWithObjects: @"Blue", @"Green", @"Red", nil ]; 
NSString *str=[words objectAtIndex:arc4random()%[words count]]; 

下我的操作方法:

[_answer setText:[NSString stringWithFormat:@"%d", arc4random()%[words count]]; 

我得到str

而在未使用的字符串錯誤我的操作方法我有一個錯誤use of undeclared identifier "words"但在視圖中加入

+0

不要犯錯誤(參考上面的評論) – JSA986

+1

讓我們在這裏建設性的。每個人都必須在某個地方學習,而不是我們所有人都出生說出代碼。但@ JSA986我強烈建議您爲Objective-C編寫一本入門/初學者書,並仔細閱讀。它有望覆蓋核心概念,如範圍,公共與私有,靜態,協議等等,這些對你非常有用。 – Levi

+0

感謝列維爲您提供的建議 – JSA986

回答

4

範圍。您在viewDidLoad方法中創建的變量(words,str)僅在該方法內有效(這是它們的作用域)。如果你想在另一個方法中使用它們,比如你的'action'方法,你需要在類作用域中聲明它們作爲成員變量/屬性。

舉個例子,在你的.h文件中:

@interface ExampleViewController : UIViewController 
    @property(nonatomic) NSString *answer; 
    // ... your other stuff ... 
@end 

在您.m文件:

@synthesize answer; 
- (void)viewDidLoad 
{ 
    NSArray *words = [NSArray arrayWithObjects: @"Blue", @"Green", @"Red", nil ]; 
    self.answer = [words objectAtIndex:arc4random()%[words count]]; 
    [super viewDidLoad]; 
} 

最後,還在.M,你的行動:

您也可以將其作爲成員變量(而不是屬性)進行decalre。

+0

謝謝你,李維現在有意義 – JSA986

+0

+1爲努力,正確的答案和天使般的耐心。 – Till

0

方法中聲明的變量對於該方法而言是本地的。要在同一類中的方法之間共享變量,使它們成爲實例變量,最好使它們變爲@property s。

對於str,您得到未使用的字符串錯誤,因爲它在設置後未使用。

0

將對象str分配給您的標籤。 [字數]包含數組的數量而不是數值。

使str對象成爲全局對象,然後使用該對象將值賦給標籤。

+1

請不要使用全局變量。每當我看到他們時,他們都讓我不寒而慄。 Objective-C是一種面向對象的語言,而全局變量很少有必要幫助打破範式。 – Levi

+0

Globals是邪惡的,如果可能的話就避免。在這種情況下,使用伊娃。 – zaph

+0

然後創建您的字符串的屬性並使用它來分配標籤 – Abhishek