访问一个数组元素,Objectice C
嗨即时尝试访问数组中的元素,并改变他们,例如我有一个数组和数组变量x,我必须通过数组并用值替换变量x 。我试过这个,但是我在for语句中得到一个错误,该语句是由于未捕获的异常'NSRangeException'导致终止应用程序,原因:'* - [__ NSArrayM objectAtIndex:]:index 3 beyond bounds [0..2]'访问一个数组元素,Objectice C
if([stack containsObject:@"X"])
{
int x;
for(x=0; [stack objectAtIndex:x] ;x++)
{
[stack replaceObjectAtIndex:x withObject:[variableValues objectForKey:@"X"]];
}
你得到的错误是什么?可能有几件事看着你的代码。如果数组的长度为零,那么访问索引为0的对象将引发错误。另外,数组需要可变才能替换工作。另外,如果您的objectForKey返回nil,则在替换方法中,尝试替换nil也会引发错误。请参见下面更新的代码:
if([stack containsObject:@"X"])
{
assert([stack isKindOfClass:[NSMutableArray class]]);
NSUInteger count = [stack count];
for(NSUInteger x = 0; x < count ;x++)
{
id value = [variableValues objectForKey:@"X"];
if (value != nil)
{
[stack replaceObjectAtIndex:x withObject:value];
}
}
}
为什么你必须在for循环中声明值变量?为什么不在for循环之前说明呢? – 2012-07-11 06:10:48
我试过上面的方法,但问题是,它会取代NSMutableArray中的所有对象,所以我试着添加if(value!= nil && [value isEqualToString:@“X”])但我得到错误[__NSCFNumber isEqualToString: ]:无法识别的选择器发送到实例。我将如何进行比较以查看堆栈中的变量是否等于x? – 2012-07-11 06:50:13
试图做isEqualToString,但它让我有错误太 – 2012-07-10 06:19:25
你需要在'stack'一个循环来检查'if'条件与'isEqualTOString:' – samfisher 2012-07-10 06:24:46
...”一个错误“... – borrrden 2012-07-10 06:24:49