1
    NSLog(@"m_datasource %d and coord.color %d",[m_dataSource.colors count],[coord.colorIndexes count]);

            cell.spotColor  = [m_dataSource.colors objectAtIndex: [coord.colorIndexes lastObject] intValue];

Here the values which I am getting for m_datasource 60 and coord.color 2 How to resole this?

4

3 回答 3

2

是因为我假设您正在使用的 NSArray 从零开始吗?并且第 60 个对象在索引 59 处?

于 2013-05-20T17:57:33.960 回答
0

你做错了:

NSLog(@"m_datasource %d and coord.color %d",[m_dataSource.colors count],[coord.colorIndexes count]);
cell.spotColor  = [m_dataSource.colors objectAtIndex: [coord.colorIndexes lastObject] intValue];

上面如果你的最后一个对象coord.colorIndexes是“100”然后检查statemnt - 它看起来像这样:

cell.spotColor  = [m_dataSource.colors objectAtIndex: 100]; 

但是在您的m_dataSource.colors数组中仅包含 60 个对象,这就是为什么它将数组抛出索引异常。

用以下代码段替换您的代码:

// get array count and substract with 1 - so it will retrun you last index of coord.colorIndexes array
cell.spotColor  = [m_dataSource.colors objectAtIndex: [coord.colorIndexes count]-1];

希望这将帮助您简要介绍数组概念。

于 2013-06-03T10:18:13.197 回答
0

如果您使用 count 方法并使用返回的值在索引处获取对象,那么您必须减去 1,因为 2 个对象的数组的计数为 2,但对象 1 的索引为 0,对象 2 具有指数为 1。

int index = [someArraytoCount count] - 1;

someObj *myObj = [otherArray objectAtIndex:index];

另外通过使用逻辑是安全的。

if (index < [otherArray count] && index >= 0)

然后该索引将存在于数组中,您不会有应用程序崩溃

于 2013-05-20T18:33:04.533 回答