在Objective-C中将变量的值作为动态代码使用?

18 浏览
0 Comments

在Objective-C中将变量的值作为动态代码使用?

我在网上找不到帮助,这让我觉得我所尝试的可能是不可能的,但我还是要问一下!我刚接触obj-c,只是为了好玩而开发...\n我试图根据从另一个数组随机选取的字符串来调用一个数组。我有一个名为pickerArray的NSArray,其中包含字符串:oneArray,twoArray作为示例。\n我还有一个NSString(pickerString),一个NSArray(oneArray)和一个NSArray(twoArray)。\n我可以随机选择字符串,但我无法将此字符串的值用作“code”\nrandomNumber = arc4random()%[pickerString count];\n根据选择的字符串,pickerString应该读取为oneArray或twoArray,即:\nrandomNumber = arc4random()%[oneArray count];\n或者:\nrandomNumber = arc4random()%[twoArray count];\n根据选择的字符串。\n编辑:我目前的代码是:\n@implementation FirstViewController{\nIBOutlet UITextView *doThis;\n}\n- (IBAction)takeATurn:(id)sender {\nint pickerNumber;\nint randomNumber;\nNSString *pickerString;\nNSString *textString;\nNSArray *pickerArray;\nNSArray *oneArray;\nNSArray *twoArray;\npickerArray = [NSArray arrayWithObjects:\n @\"oneArray\",\n @\"twoArray\",\n nil];\noneArray = [NSArray arrayWithObjects:\n @\"example text to display\",\n @\"expmple text to display 2\",\n nil];\ntwoArray = [NSArray arrayWithObjects:\n @\"example text to display in array two\",\n @\"expmple text to display in array two 2\",\n nil];\npickerNumber = arc4random()%[pickerArray count];\npickerString = [pickerArray objectAtIndex:pickerNumber];\nrandomNumber = arc4random()%[NSArray(pickerString) count];\n //不能编译 - 应该是[oneArray count];(或oneArray的位置上的twoArray)\ntextString = [NSArray(pickerString) objectAtIndex:randomNumber];\n //与上述相同。\ndoThis.text = textString;\n}\n谢谢任何帮助。\nMike

0
0 Comments

这是一个Objective-C编程问题,问题的出现是因为作者想要将变量的值作为动态代码使用。解决方法是根据stackoverflow上的一个解答,将代码块放入方法中,并尝试使用NSArrayFromString来修改代码以适应需求。

Objective-C中有一种需求,即将变量的值作为动态代码使用。作者在stackoverflow上找到了一个解答,解答的链接为https://stackoverflow.com/a/4446914/584663。作者在昨天阅读了这个帖子,但不太确定如何使用它,他试图通过使用NSArrayFromString来修改代码以适应需求。

0
0 Comments

问题原因:这个问题涉及到了关键值编码(key-value coding)的使用。代码中的`[self valueForKey:pickerString]`会返回一个名为`pickerString`的属性。但是,这种写法需要将数组移动到实例属性中,而不是局部变量中。

解决方法:将数组移动到实例属性中。具体做法是在`FirstViewController`类中声明以下实例属性:

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

然后,在初始化对象时(如`viewWillAppear`方法中),给这些属性赋上相应的值。最后,在`takeATurn`方法中,使用`self.pickerArray`获取随机数组名,再使用`[self valueForKey:pickerString]`获取对应的数组。

文章整理如下:

这是一个关键值编码的问题:

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
- (void)viewWillAppear:(BOOL)animated {
    self.pickerArray = @[@"oneArray", @"twoArray"];
    self.oneArray = @[@"example text to display", @"example text to display 2"];
    self.twoArray = @[@"example text to display in array two", @"example 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;
}
@end

非常感谢您的及时帮助!我非常感激,正如我所说,我只是为了好玩而学习一下,我在北海控制一座油井,有时候可能没有什么事情可做!

我可能已经醒太久了,但我仍然遇到了一些困难!

谢谢,这又是非常大的帮助,我在`int randomNumber = arc4random_uniform(array count]) NSString textString = array[randomNumber];`这里遇到一些编译问题(除了缺少括号和分号之外)。显示了“需要标识符”和“接口类型无法静态分配”的错误。我明天再试一次 🙂

感谢您的意见,我现在已经解决了问题,并且我相信我也理解了! 😉 再次感谢,Mike

0