Почему мой CGPoint не сохраняет правильно в массиве NSMutable? - PullRequest
0 голосов
/ 17 июня 2011

Итак, мой код основан на ответе, найденном по адресу: Как можно легко добавить объекты CGPoint в NSArray?

Мой код теперь читается как:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch * touch = [touches anyObject];
    locationOne = [touch locationInView: [UIApplication sharedApplication].keyWindow];
    NSLog(@"In touchesBegan");
    NSLog(@"x is: %.3f.  y is: %.3f", locationOne.x, locationOne.y);
    [points addObject:[NSValue valueWithCGPoint:locationOne]];
    NSValue *val = [points objectAtIndex:[points count]];
    CGPoint p = [val CGPointValue];
    NSLog(@"in points array:  x is: %.3f, y is: %.3f", p.x ,p.y);
}

2011-06-16 13:21:57.367 canvas_test[7889:307] In touchesBegan
2011-06-16 13:21:57.371 canvas_test[7889:307] x is: 115.000.  y is: 315.500
2011-06-16 13:21:57.374 canvas_test[7889:307] in points array:  x is: 0.000, y is: 0.000
2011-06-16 13:22:00.982 canvas_test[7889:307] In touchesBegan
2011-06-16 13:22:00.985 canvas_test[7889:307] x is: 274.500.  y is: 386.000
2011-06-16 13:22:00.988 canvas_test[7889:307] in points array:  x is: 0.000, y is: 0.190
2011-06-16 13:22:11.476 canvas_test[7889:307] In touchesBegan
2011-06-16 13:22:11.480 canvas_test[7889:307] x is: 105.500.  y is: 140.500
2011-06-16 13:22:11.483 canvas_test[7889:307] in points array:  x is: 0.000, y is: 0.190

Кто-нибудь знает, что может быть не так?

редактирование:

Я заметил, что каждый раз, когда я проверяю счетчик очков, он всегда равен 0. Есть ли способ проверить, правильно ли я инициализировал свой NSMutableArray? я использую points = [[NSMutableArray alloc] init]; в функции init, и иметь NSMutableArray * points; в моем .h файле. Нужно ли что-то еще делать для запуска NSMutableArray?

Ответы [ 2 ]

3 голосов
/ 17 июня 2011

Я удивлен, что это не сбой. Вы читаете за пределами массива:

NSValue *val = [points objectAtIndex:[points count]];

Это должно быть:

NSValue *val = [points objectAtIndex:[points count] - 1];

или

NSValue *val = [points lastObject];
1 голос
/ 17 июня 2011

[points objectAtIndex:[points count]] всегда будет вне диапазона.Последний объект в массиве будет иметь индекс [points count] - 1.

В качестве альтернативы вы можете просто использовать NSValue *val = [points lastObject].

...