2012-06-14 49 views
0

当我运行此代码并按下“下一步”按钮。我得到一个错误的超额错误。我希望它做的是检查用户输入的内容是否与每次输入正确答案时给定标签的索引相比较。 例如:naam.text = @“Natriumfluoride”。然后formule.text必须在“formules”中具有与“namen”中相同的索引。检查在NSMutableArray答案

-(IBAction)next:(id)sender { 

    if ([formule.text isEqualToString:[formules objectAtIndex:x]]) { 
     x = arc4random() % x; 
     naam.text = [namen objectAtIndex:x]; 
    } 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    formules = [NSMutableArray arrayWithObjects:@"NaNO3",@"NaCH3COO",@"NaCl",@"NaBr",@"NaI",@"Na2SO4",@"NaF",@"Na2S",@"NaOH",@"Na2SO3",@"Na2CO3",@"Na3PO4",@"Na2O",nil]; 

    namen = [NSMutableArray arrayWithObjects:@"Natriumnitraat",@"Natriumacetaat",@"Natriumchloride",@"Natriumbromide",@"Natriumjodide",@"Natriumsulfaat",@"Natriumfluoride",@"Natriumsulfide",@"Natriumhydroxide",@"Natriumsulfiet",@"NatriumCarbonaat",@"Natriumfosfaat",@"Natriumoxide", nil]; 
    // Do any additional setup after loading the view from its nib. 

    x = arc4random() % [formules count]; 
    naam.text = [namen objectAtIndex:x]; 
} 

任何人都知道我的问题是什么以及如何解决它?

回答

0

你必须创建后保留您的阵列

[formules retain]; 
[namen retain]; 

,如果你使用的是圆弧使用[NSMutableArray的页头] initWithObjects: 或定义数组作为强大的性能

+0

那么,这是一个简单的解决方案!我想知道你能否告诉我为什么我必须这样做?保留它们的功能是什么? –

+0

,因为你的数组将在viewDidLoad之后被释放并且不存在。在下一个:发件人你尝试访问它,你的应用程序崩溃。保留你说,你需要更长的对象。 – Chakalaka

+0

好的,非常感谢你解释和解决我的问题! –

0

我不是一个点晴那么为什么你写了x = arc4random() % x;,也许你可能写了x = arc4random() % 10;.Also,你是从随机值检查。你应该把一个for循环,应该检查你的标签阵列的每个值。

+0

你是对的,但我已经将它改为x = arc4random()%[formules count];这是一个小错误。但不是主要问题。不管怎么说,还是要谢谢你! –

+0

好的,但你为什么使用随机值?你能解释一下这背后的逻辑吗? –

+0

这是因为我不希望文本以特定顺序显示。我想随机展示它。这是一个学习一些chimistry的应用程序。因此,如果它不断按照相同的顺序重复这些单词,这对学习并不是很有用。这是随机化我认为的单词的一种非常好的方式。 –