这个错误信息 -[__NSArrayM objectAtIndexedSubscript:]: index 18446744073709551615 beyond bounds [0 .. 0]' 指出了两个关键问题:

  1. 问题描述: 尝试访问 NSMutableArray 的索引 18446744073709551615,但这个索引超出了数组的当前边界。数组目前只有一个元素(索引范围是 [0 .. 0]),这意味着合法的索引值只能是 0
  2. 特别的索引值: 索引 18446744073709551615 实际上是 NSUInteger 类型的最大值 (NSUIntegerMax),通常在尝试访问一个不存在的元素时出现,比如使用 indexOfObject: 方法查找不在数组中的对象时,它会返回 NSNotFoundNSNotFound 的值就是 NSUIntegerMax

常见原因及解决方法

这个问题通常发生在以下几种情况中:

  • 错误处理数组索引: 比如,使用了某个方法返回的索引值进行数组访问,但没有先检查这个索引值是否为 NSNotFound
  • 数组越界访问: 尝试访问的索引超出了数组的实际范围。

要解决这个问题,你需要做的是:

  1. 检查索引值: 在使用一个动态获取的索引值访问数组之前,先检查这个索引值是否为 NSNotFound 或者确保索引在数组的合法范围内。
NSUInteger index = [yourArray indexOfObject:someObject];
if (index != NSNotFound) {
    // 安全使用 index 访问数组
    id object = yourArray[index];
} else {
    // 处理对象未找到的情况
}
  1. 验证数组非空再访问: 在访问数组的特定索引之前,确保数组非空且索引值小于数组的长度。
if (yourArray.count > 0 && someIndex < yourArray.count) {
    id object = yourArray[someIndex];
} else {
    // 处理数组为空或索引越界的情况
}

通过这些检查,你可以避免出现越界访问的错误,并且更安全地处理数组操作。