2013-12-16 28 views
0

当我用NSString对象初始化而不是手动输入文本时,为什么我不能访问NSMutableArray的第4个元素?在NSMutableArray中访问NSString

例如:

NSString * d = @"d"; 

self.arr = [[NSMutableArray alloc] initWithObjects: 
      [NSMutableArray arrayWithObjects:@"A",@"B",@"C",d,nil], 
      [NSMutableArray arrayWithObjects:@"A",@"B",@"C",@"d",nil], 
      nil]; 

这会导致超出界限误差(的NSString):

NSMutableArray *subArray = [self.arr objectAtIndex:0]; 
question = [subArray objectAtIndex:3]; 

这不(@ “d”):

NSMutableArray *subArray = [self.arr objectAtIndex:1]; 
question = [subArray objectAtIndex:3]; 

为什么这是否发生?当然,他们是一样的东西?我希望能够减少我不得不写@“d”的次数。

+0

有你尝试用'的NSLog(@ “%@”,[self.arr firstObject] objectAtIndex:3]);' –

+0

这是一个测验类型的应用程序?还有其他方式可以存储答案。 –

+4

此代码工作完美。没有超越界限的错误。 –

回答

1

他们应该是一样的......我试着在我的项目中。它运作良好。

NSString * d = @"d"; 

NSMutableArray *array = [[NSMutableArray alloc] initWithObjects: 
       [NSMutableArray arrayWithObjects:@"A",@"B",@"C",d,nil], 
       [NSMutableArray arrayWithObjects:@"A",@"B",@"C",@"d",nil], 
       nil]; 

NSLog(@"0 array 4th:%@",[[array objectAtIndex:0] objectAtIndex:3]); 
NSLog(@"1 array 4th:%@",[[array objectAtIndex:1] objectAtIndex:3]); 

输出结果如下:

2013-12-16 17:05:30.092 Demo[1005:60b] 0 array 4th:d 
2013-12-16 17:05:30.094 Demo[1005:60b] 1 array 4th:d