2011-10-09 31 views
0
NSLog(@" --- object id = %ld --- ", 
      (long) [mp_list objectAtIndex : 0]);  

    target_coordinate_2D = [[mp_list objectAtIndex : 0] coordinate]; 

    // Some test code here which verifies that target_coordinate_2D 
    // gets assigned a valid "coordinate" value. 

    [mapView addAnnotation : [mp_list objectAtIndex : 0]]; 

考虑以上3个语句:关于objectAtIndex的返回值

根据文档中,NSArray的方法“objectAtIndex”应该返回一个对象。我的理解是返回的值是一个指向该对象的数字指针。

但我得到的是:

--- object id = 0 --- 
'NSInvalidArgumentException', reason: '-[... addObject:]: attempt to insert nil' 

我的问题是:

为什么 “对象ID” 是零?由于target_coordinate_2D被分配了有效值,因此 [mp_list objectAtIndex:0]的确应该是具有有效“坐标” 属性的有效对象。

在最后的发言中,我想在mp_list添加对象的MapView。仿真器抛出的NS异常 与“[mp_list objectAtIndex:0]”为 的事实一致为零。所以肯定有一些我错过了关于NSArray的东西。 为了将一个对象分配给另一个数组的数组应该是什么?

希望有人见地在这方面可以帮助...

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html

+1

如果您要将指针打印到某个对象,则应该使用'%p'作为格式说明符,并且不要将对象转换为'(long)',只需保留它即可。换句话说,使用'NSLog(@“---对象id =%p ---”,[mp_list objectAtIndex:0]);' –

+0

感谢您的评论,我已将其更改为%p,现在我得到了“0x0 “而不是”0“。 – Stanley

回答

4

这听起来像mp_list本身nil,这就是为什么[mp_list objectAtIndex:0]将返回nil(因为消息nil回报nil)。

+0

@Keven,你是对的mp_list是零。我一定在某个地方犯了一个错误。但是,你认为这是将一个对象从一个数组添加到另一个的正确方法吗?我的意思是,如果mp_list不是零,并且有一个有效的对象在索引== 0 ... – Stanley

+1

@Stanley:当然,没有错''someMutableArray addObject:[otherArray objectAtIndex:0]'',假设你真的只想获取数组中的第一个对象并将其添加到第二个数组中。 –

+0

感谢您的评论。已经检查mp_list一直都是零。在第二个陈述中,target_coordinate_2D被分配了一个有效的值只是一个幻觉。它可能只是保持以前的价值。令人意想不到的是第二个声明没有任何错误。似乎nil对象刚刚忽略了“坐标”消息调用。我最后剩下的查询就是为什么target_coordinate_2D不会被其他值所覆盖,因此... – Stanley

0

不知道如果这是正确的,但在你的NSLog中,你打印出的对象很长吗?据我所知,你只能把对象放在NSArray中,你不能在其中放置原始类型。所以这可能是关于你放入数组的数据的问题。

+0

感谢您的回答。但是double的格式代码是%lf。 %ld很长。 --- http://www.dgp.toronto.edu/~ajr/209/notes/printf.html – Stanley

+0

另外,感谢提醒我关于原始类型。在这方面,这个对象应该没问题... – Stanley

+1

关于打印对象的时间长了,我只是使用了Objective-C中的对象实际上是代表存储对象信息的内存地址的长整数。打印出的值代表这些地址。实践是检查地址是否有价值。 – Stanley