0

So, I've based my code off of the answer found at: How can I add CGPoint objects to an NSArray the easy way?

My code now reads like:

-(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

Does anybody have any idea what could possibly be going wrong?

edit:

I've noticed that anytime I check my points count, it's always at 0. Is there a way of checking whether I initialized my NSMutableArray correctly? I use points = [[NSMutableArray alloc] init]; in the init function, and have NSMutableArray *points; in my .h file. Do I need to do anything more to initiate the NSMutableArray?

Community
  • 1
  • 1
Jeff R
  • 1
  • 3

2 Answers2

3

I'm surprised this doesn't crash. You're reading beyond the end of the array:

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

This should be:

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

or

NSValue *val = [points lastObject];
Rob Napier
  • 286,113
  • 34
  • 456
  • 610
1

[points objectAtIndex:[points count]] will always be out of range. The last object in the array will be at index [points count] - 1.

Alternatively you could just use NSValue *val = [points lastObject].

Simon Whitaker
  • 20,506
  • 4
  • 62
  • 79