2013-03-14 114 views
0

我的数组:为什么此数组返回0作为对象计数?

NSMutableArray *squareLocations; 

CGPoint dotOne = CGPointMake(1, 1); 
[squareLocations addObject:[NSValue valueWithCGPoint:dotOne]]; 

CGPoint dotTwo = CGPointMake(10, 10); 
[squareLocations addObject:[NSValue valueWithCGPoint:dotTwo]]; 

CGPoint dotThree = CGPointMake(100, 100); 
[squareLocations addObject:[NSValue valueWithCGPoint:dotThree]]; 

int num = [squareLocations count]; 

for (int i = 0; i < num; i++) 
{ 
    NSValue *pointLocation = [squareLocations objectAtIndex:i]; 
    NSLog(@"%@", pointLocation); 
} 

当我问squareLoctions的对象数,则返回零?但上面要求计数我添加了三个NSValue对象?有人有主意吗?

回答

7

您需要初始化数组第一

NSMutableArray *squareLocations = [[NSMutableArray alloc] init]; 
+1

+1正确的答案。我只是想我应该添加一个稍微冗长的答案来帮助那个家伙。 – Till 2013-03-14 02:06:55

+1

超级有选择性+1,因为我更喜欢简短的答案。然后提问者应该研究为什么如果他们不明白就是这种情况。 – borrrden 2013-03-14 02:37:38

+0

@borrrden对你的评论大笑:D ......你当然是对的。我只是觉得我应该浪费一分钟。 – Till 2013-03-14 02:44:35

3

该数组返回0因为你实际上并不要求其大小的数组。

您假定为一个数组的对象既没有被分配,也没有被正确初始化。

您正在询问一个当前初始化为nil的实例。有趣的部分是,它不会崩溃,因为Objective-C将允许您调用nil实例上的任何方法(选择器)(呃,该术语不安静)。只是,那些nil实例将总是返回0NO,0.0f,0.0nil,具体取决于被要求返回值时的预期类型。换句话说,它总是返回一个值,该值在向期望类型转换时将被设置为零。


要解决这个问题,你将需要分配,初始化和NSMutableArray的实例分配给您的变量。

这可能或者已经使用了正确的allocinit方法相结合来完成:

NSMutableArray *squareLocations = [[NSMutableArray alloc] init]; 

或者你可以使用的便利性构造例如像之一:

NSMutableArray *squareLocations = [NSMutableArray array]; 

下一次你遇到这种奇怪的行为,首先检查相关实例是不是nil

相关问题