Ios 获取内存地址而不是该地址处的对象

Ios 获取内存地址而不是该地址处的对象,ios,objective-c,cocoa-touch,pointers,memory-management,Ios,Objective C,Cocoa Touch,Pointers,Memory Management,我正在编写一个程序,其中包含一个数组,其中包含多个对象。然后,我从该数组中获取特定对象,并将它们的索引(从array1)作为NSNumber存储在另一个数组中。现在,我试图在项目中稍后通过从表视图中的array2中拉出索引来引用array1中的对象,但我不断收到一个错误,表明我获取的是对象的内存地址,而不是对象本身。代码如下: self.indexArray = [NSMutableArray new]; for (Item *item in array1){ if (i

我正在编写一个程序,其中包含一个数组,其中包含多个对象。然后,我从该数组中获取特定对象,并将它们的索引(从array1)作为NSNumber存储在另一个数组中。现在,我试图在项目中稍后通过从表视图中的array2中拉出索引来引用array1中的对象,但我不断收到一个错误,表明我获取的是对象的内存地址,而不是对象本身。代码如下:

self.indexArray = [NSMutableArray new];
    for (Item *item in array1){
        if (item.ID == comparedItem.ID){
            NSUInteger num = [array1 indexOfObject:item];
            NSNumber *numval = [NSNumber numberWithInteger:num];
            [self.indexArray addObject:numval];
        }
    }

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = (EditItemTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"quantityCell"];
int indexNum = [[self.indexArray objectAtIndex:(indexPath.row-1)] intValue];
NSString *descString = [NSString stringWithFormat:@"%@ %@ - %@",[[array1 objectAtIndex:indexNum]desc1],[[array1 objectAtIndex:indexNum]desc2],indexNum];
return cell;
}
所以我在这行中得到了一个错误:
intindexnum=[[self.indexArray objectAtIndex:(indexPath.row-1)]intValue]通常是这样读的:
***由于未捕获的异常“NSRangeException”而终止应用程序,原因:'***-[\uu NSArrayM objectAtIndex::]:索引4294967295超出边界[0..2]'
。这是假设我在运行上述代码之前向数组中添加了3个对象(因此为0..2)。我假设4294967295是一个内存地址。有人知道我怎样才能得到这个物体吗


谢谢大家!

4294967295
表示为无符号int32。在此上下文中,它表示
indepath.row-1==-1
indepath.row==0

我不知道为什么要从
indexath.row
中减去
1
,但应该添加一些安全性来检查边界,以确保数组查找不会获取超出边界的元素

if (indexPath.row == 0) // do something special


如果在代码行之前记录indexPath或indexPath.row的值,会发生什么情况?
4294967295
表示为无符号int32。在此上下文中,它表示
indepath.row-1==-1
indepath.row==0
。它看起来像
indepath.row
是0,减去1会导致整数下溢。indepath.row为我提供了良好的数据(基于迭代的0、1、2)。记录类似于
[self.indexArray objectAtIndex:2]
的内容,其中我硬编码objectAtIndex,而不是使用indexPath引用它。行-1也为我提供了一个有效的答案。哦。看来我是个十足的白痴。哇!我对自己的愚蠢感到惊讶。不管是伊恩还是其他人,无论谁先发布他们的答案,都会从我这里得到一个漂亮的绿色复选标记!
[self.indexArray objectAtIndex:indexPath.row]