我正在编写一个程序,其中包含一个包含多个对象的数组。然后,我从该数组中获取特定对象,并将其索引(从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是一个内存地址。有没有人知道如何才能获得对象本身?
谢谢!
答案 0 :(得分:3)
4294967295
是-1
,表示为无符号的int32。在此上下文中,它代表indexPath.row-1 == -1
或indexPath.row == 0
。
我不确定你为什么要从1
中减去indexPath.row
,但你应该添加一些安全性来检查边界,以确保你的数组查找不会获取一个元素超出范围。
if (indexPath.row == 0) // do something special
或
[self.indexArray objectAtIndex:indexPath.row]