我正在制作一个游戏,它从常规 C 数组中分配一个问题的标签。
- (void)viewDidLoad
{
[super viewDidLoad];
for (int i = 0; i < 45; i++) {
basketball_numbers1[i] = (arc4random()%999)+100;
basketball_numbers2[i] = (arc4random()%999)+100;
for (int j = 0; j < 30; j++) {
int first = basketball_numbers1[i];
int second = basketball_numbers2[i];
basketball_questions[j] = [[NSString stringWithFormat: @"%d + %d", first, second] retain];
basketball_answers[j] = [[NSString stringWithFormat: @"%d", basketball_numbers1[i] + basketball_numbers2[i]] retain];
}
}
在我将它们注释掉之前,这段代码可以正常工作并将问题和答案打印到控制台没有问题。
但是当我运行模拟器并输入正确答案时,相同的问题会留在标签上,即使计数(用于增加数组索引的变量)增加了,我通过 NSLog 确认了这一点。
其他一些注意事项:当我手动输入数组的值时,它没有问题。在做了一些研究之后,我还在数组末尾添加了“保留”,这实际上消除了我在此之前遇到的一些问题,但我不确定保留/释放是用于常规 C 数组还是仅用于 NSArray。
这是单击按钮时在文本字段中读取的代码。
- (IBAction)basketball_click:(id)sender {
basketball_input = self.basketball_textfield.text;
NSLog(@"INPUT: %@", self.basketball_textfield.text);
if ([self.basketball_textfield.text isEqualToString:(basketball_answers[count])]) {
NSLog(@"THEY ARE EQUAL");
isCorrect = TRUE;
self.basketball_textfield.text = @"";
}
...
if(isCorrect) {
NSLog(@"Retain Count: %d", [basketball_questions[count] retainCount]);
correct.text = @"CORRECT!";
basketball_right++;
count++;
NSLog(@"COUNT: %d", count);
question_label.text = basketball_questions[count];
NSLog(@"NEW QUESTION: %@", basketball_questions[count]);
}