SIGABRT while adding objects to an NSMutableArray

1

I have a method which returns an NSArray with points to be plotted. Following is the code for my method.

- (NSArray *)pointsToPlot:(GraphView *)requester
{
    NSMutableArray *points = [[NSSet alloc] init];

    CGPoint midPoint;
    midPoint.x = self.graph.bounds.origin.x + self.graph.bounds.size.width / 2;
    midPoint.y = self.graph.bounds.origin.y + self.graph.bounds.size.height / 2;

    //Find points to plot
    NSValue *point1 = [NSValue valueWithCGPoint:CGPointMake(midPoint.x - 10, midPoint.y)];
    NSValue *point2 = [NSValue valueWithCGPoint:CGPointMake(midPoint.x, midPoint.y - 10)];
    NSValue *point3 = [NSValue valueWithCGPoint:CGPointMake(midPoint.x + 10, midPoint.y)];
    [points addObject:point1];
    [points addObject:point2];
    [points addObject:point3];


    [points autorelease];
    return points;
}

I am getting SIGABRT as soon as I add point1 to the points array.

Following is the stack trace obtained:

2011-10-27 10:43:36.939 Graphing Calculator[7056:207] -[__NSSet0 addObject:]: unrecognized selector sent to instance 0x4b57900
2011-10-27 10:43:36.943 Graphing Calculator[7056:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSSet0 addObject:]: unrecognized selector sent to instance 0x4b57900'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x00dc95a9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x00f1d313 objc_exception_throw + 44
    2   CoreFoundation                      0x00dcb0bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
    3   CoreFoundation                      0x00d3a966 ___forwarding___ + 966
    4   CoreFoundation                      0x00d3a522 _CF_forwarding_prep_0 + 50
    5   Graphing Calculator                 0x000073cd -[GraphViewController pointsToPlot:] + 1037
    6   Graphing Calculator                 0x00006895 -[GraphView drawRect:] + 965
    7   UIKit                               0x00053187 -[UIView(CALayerDelegate) drawLayer:inContext:] + 426
    8   QuartzCore                          0x016b3b5e -[CALayer drawInContext:] + 143
    9   QuartzCore                          0x016bfe47 _ZL16backing_callbackP9CGContextPv + 85
    10  QuartzCore                          0x0160d1f7 CABackingStoreUpdate + 2246
    11  QuartzCore                          0x016bfd24 -[CALayer _display] + 1085
    12  QuartzCore                          0x016b627d CALayerDisplayIfNeeded + 231
    13  QuartzCore                          0x0165b0c3 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 325
    14  QuartzCore                          0x0165c294 _ZN2CA11Transaction6commitEv + 292
    15  QuartzCore                          0x0165c46d _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 99
    16  CoreFoundation                      0x00daa89b __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 27
    17  CoreFoundation                      0x00d3f6e7 __CFRunLoopDoObservers + 295
    18  CoreFoundation                      0x00d081d7 __CFRunLoopRun + 1575
    19  CoreFoundation                      0x00d07840 CFRunLoopRunSpecific + 208
    20  CoreFoundation                      0x00d07761 CFRunLoopRunInMode + 97
    21  GraphicsServices                    0x010011c4 GSEventRunModal + 217
    22  GraphicsServices                    0x01001289 GSEventRun + 115
    23  UIKit                               0x00029c93 UIApplicationMain + 1160
    24  Graphing Calculator                 0x000021d9 main + 121
    25  Graphing Calculator                 0x00002155 start + 53
)
terminate called after throwing an instance of 'NSException'

Could someone please explain me what am I doing wrong here?

objective-c
cocoa
nsmutablearray
asked on Stack Overflow Oct 27, 2011 by KunalC • edited Oct 27, 2011 by jscs

2 Answers

1

Change

    NSMutableArray *points = [[NSSet alloc] init];

to

    NSMutableArray *points = [[NSMutableArray alloc] init];
answered on Stack Overflow Oct 27, 2011 by edsko
0

You are creating and initializing an NSSet and storing it to a reference for NSMutableArray.

Change the following line:

NSMutableArray *points = [[NSSet alloc] init];

To this line:

NSMutableArray *points = [[NSMutableArray alloc] initWithCapacity:3];
answered on Stack Overflow Oct 27, 2011 by David M. Syzdek

User contributions licensed under CC BY-SA 3.0