将对象添加到NSMutableArray时的SIGABRT

时间:2011-10-27 18:16:42

标签: objective-c cocoa nsmutablearray

我有一个返回NSArray的方法,其中包含要绘制的点。以下是我的方法的代码。

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

我将SIGABRT添加到point1数组后,我收到points

以下是获得的堆栈跟踪:

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'

有人可以解释一下我在这里做错了什么吗?

2 个答案:

答案 0 :(得分:1)

更改

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

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

答案 1 :(得分:0)

您正在创建并初始化NSSet并将其存储到NSMutableArray的引用中。

更改以下行:

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

到这一行:

NSMutableArray *points = [[NSMutableArray alloc] initWithCapacity:3];