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 对象???有人有想法么?

4

2 回答 2

7

您需要先初始化数组

NSMutableArray *squareLocations = [[NSMutableArray alloc] init];
于 2013-03-14T01:40:56.520 回答
3

该数组正在返回0,因为您实际上并没有询问数组的大小。

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

您正在询问当前初始化为 is 的实例nil。有趣的是它不会崩溃,因为 Objective-C 将允许您在nil实例上调用任何方法(选择器)(嗯,这个术语并不完全正确)。只是,当被要求返回值时,这些实例nil将始终返回0NO、或取决于预期的类型。换句话说,它总是返回一个值,当被转换为预期类型时,将设置为零。0.0f0.0nil


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

这可以使用适当的allocinit方法组合来完成:

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

或者您可以使用其中一种方便的构造函数,例如:

NSMutableArray *squareLocations = [NSMutableArray array];

下次遇到这种奇怪的行为时,请检查有问题的实例是否不是nil第一个。

于 2013-03-14T01:59:09.757 回答