2013-12-22 53 views
1

我在網上找到幫助時遇到了一些麻煩,這讓我覺得我想要做的事可能不可能,但我仍然會問!我是obj-c的新手,我只是爲了一點樂趣而開發......將變量的值用作目標c中的動態代碼?

我想調用一個基於從另一個數組隨機抽取的字符串的數組。我有一個NSArray叫pickerArray它包含的字符串:oneArray,twoArray爲例。

我也有NSString(pickerString),NSArray(oneArray)和NSArray(twoArray)。

我可以隨機挑選的字符串罰款,我不能做的是使用這種刺痛的值作爲「代碼」

randomNumber = arc4random()%[pickerString count]; 

pickerString應視其串讀作oneArray或twoArray代碼
被拾取,即

randomNumber = arc4random()%[oneArray count]; 

或:

randomNumber = arc4random()%[twoArray count]; 

取決於拾取的字符串。

編輯:我當前的代碼是:

@implementation FirstViewController{ 

IBOutlet UITextView *doThis; 
} 
- (IBAction)takeATurn:(id)sender { 
int pickerNumber; 
int randomNumber; 
NSString *pickerString; 
NSString *textString; 
NSArray *pickerArray; 
NSArray *oneArray; 
NSArray *twoArray; 

pickerArray = [NSArray arrayWithObjects: 
       @"oneArray", 
       @"twoArray", 

       nil]; 

oneArray = [NSArray arrayWithObjects: 
       @"example text to display", 
       @"expmple text to display 2", 

       nil]; 
twoArray = [NSArray arrayWithObjects: 
       @"example text to display in array two", 
       @"expmple text to display in array two 2", 

       nil]; 

pickerNumber = arc4random()%[pickerArray count]; 

pickerString = [pickerArray objectAtIndex:pickerNumber]; 

randomNumber = arc4random()%[NSArray(pickerString) count]; 
    //does not compile - should read [oneArray count]; (or twoArray in place of oneArray 

textString = [NSArray(pickerString) objectAtIndex:randomNumber]; 
    //same as above. 


doThis.text = textString; 
} 

感謝您的幫助。 邁克

+1

你是什麼意思 「叫陣」 是什麼意思?你在尋找鍵值編碼嗎? – 2013-12-22 16:34:51

+0

原創帖子編輯,希望你能看到我想要做的! – Mike

+0

是的,就像我想的那樣,你正在尋找KVC。 – 2013-12-22 17:02:38

回答

2

這是一個鍵值編碼問題:

NSArray *arrayToUse = [self valueForKey:pickerString]; 

這將返回由pickerString命名的房產。

要使其按照您的方式工作,請將數組移到實例屬性中,而不是本地變量。


編輯:

這將是這樣的:

@interface FirstViewController() 
@property (nonatomic, readwrite, weak) IBOutlet UITextView *doThis; 

@property (nonatomic, readwrite, strong) NSArray *pickerArray; 
@property (nonatomic, readwrite, strong) NSArray *oneArray; 
@property (nonatomic, readwrite, strong) NSArray *twoArray; 
@end 

@implementation FirstViewController 

// You can put this wherever you initialize the object (init, viewDidLoad, awakeFromNib, etc.) 
// viewWillAppear just tends to work for a wide variety of design choices. 
- (void)viewWillAppear:(BOOL)animated { 
    self.pickerArray = @[ 
         @"oneArray", 
         @"twoArray", 
        ]; 

    self.oneArray = @[ 
        @"example text to display", 
        @"expmple text to display 2", 
        ]; 

    self.twoArray = @[ 
        @"example text to display in array two", 
        @"expmple text to display in array two 2", 
        ]; 
} 

- (IBAction)takeATurn:(id)sender { 
    int pickerNumber = arc4random_uniform([self.pickerArray count]); 
    NSString *pickerString = pickerArray[pickerNumber]; 
    NSArray *array = [self valueForKey:pickerString]; 
    int randomNumber = arc4random_uniform(array count]); 
    NSString *textString = array[randomNumber]; 
    self.doThis.text = textString; 
} 
+0

非常感謝您的及時幫助!非常感謝,正如我所說的,我只是想學習一些有趣的事情,因爲我的日常工作是控制北海的一個石油鑽井平臺,有時候可以做的很少! – Mike

+0

我可能已經清醒了很久,但我仍然在爲此而苦苦掙扎! – Mike

+0

謝謝,在那裏的另一個巨大的幫助,我有一些問題 int randomNumber = arc4random_uniform(array count)) NSString textString = array [randomNumber]; 沒有編譯(除了丟失括號和分號)。顯示一個標識符,並顯示不能靜態分配接口類型。我會在早上再去一次:) – Mike

0

你可以把代碼塊到方法,並嘗試解決方案所帶來的位置:

https://stackoverflow.com/a/4446914/584663

+0

謝謝,我昨天看過這篇文章,但我並不太確定如何使用它,我試圖通過使用NSArrayFromString來改變它以適應我的想法。 – Mike