我的阵列:
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对象???有人有什么想法吗?
答案 0 :(得分:7)
您需要先初始化数组
NSMutableArray *squareLocations = [[NSMutableArray alloc] init];
答案 1 :(得分:3)
该数组正在返回0
,因为实际上并没有询问数组的大小。
您假定为数组的对象既未分配,也未正确初始化。
您正在询问当前初始化为nil
的实例。有趣的是它不会崩溃,因为Objective-C允许你调用nil
实例上的任何方法(选择器)(好吧,这个术语不安静)。只是,这些nil
个实例将始终返回0
,NO
,0.0f
,0.0
或nil
,具体取决于要求时的预期类型他们的回报值。换句话说,它总是返回一个值,当它被转换为期望的类型时,将被设置为零。
要解决该问题,您需要为变量分配,初始化和分配NSMutableArray
的实例。
可以使用正确的alloc
和init
方法组合完成:
NSMutableArray *squareLocations = [[NSMutableArray alloc] init];
或者您可以使用其中一个便捷构造函数,例如:
NSMutableArray *squareLocations = [NSMutableArray array];
下次遇到这种奇怪的行为时,请先检查相关实例是否不是nil
。