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

时间:2015-01-27 20:46:11

标签: ios objective-c cocoa-touch pointers memory-management

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

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;
}

因此我收到错误:int indexNum = [[self.indexArray objectAtIndex:(indexPath.row-1)] intValue];通常会读取如下内容:*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 4294967295 beyond bounds [0 .. 2]'。这假设我在运行上面的代码之前向数组中添加了3个对象(因此为0 .. 2)。我假设4294967295是一个内存地址。有没有人知道如何才能获得对象本身?

谢谢!

1 个答案:

答案 0 :(得分:3)

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

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

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

[self.indexArray objectAtIndex:indexPath.row]