#objective-c #cocoa #nsmutablearray
#objective-c #какао #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'
Может кто-нибудь, пожалуйста, объясните мне, что я здесь делаю не так?
Ответ №1:
Изменить
NSMutableArray *points = [[NSSet alloc] init];
Для
NSMutableArray *points = [[NSMutableArray alloc] init];
Ответ №2:
Вы создаете и инициализируете NSSet и сохраняете его в качестве ссылки для NSMutableArray.
Измените следующую строку:
NSMutableArray *points = [[NSSet alloc] init];
К этой строке:
NSMutableArray *points = [[NSMutableArray alloc] initWithCapacity:3];