我有一个自定义类MDRect,我正在尝试添加NSMutableArray
数组是属性:
@property (retain) NSMutableArray* array;
它在NSView子类的initMethod中初始化:
-(id)init {
array = [NSMutableArray new];
return [super init];
}
然后我想在这里添加一个对象:
-(void)mouseUp:(NSEvent *)theEvent
{
NSPoint mouseLoc = [NSEvent mouseLocation];
mouseLoc = [self mouse:mouseLoc inRect:[self frame]];
CGSize temp;
NSLog(@"%f",mouseLoc.y - mouseLocation.y);
NSLog(@"%f",mouseLoc.x - mouseLocation.x);
temp.height = mouseLoc.y - mouseLocation.y;
temp.width = mouseLoc.x - mouseLocation.x;
tempRect.size = temp;
MDRect * rect = [[MDRect alloc] initWithColor:[NSColor orangeColor] andRect:tempRect];
[array addObject:rect];
int i = (int)array.count;
NSLog(@"%i",i);
[self setNeedsDisplay:YES];
}
但是没有将对象添加到数组中。它永远不会返回NSLog函数中除0以外的任何值。我做错了什么?
答案 0 :(得分:5)
您的问题是init
方法。你错了,看起来应该是这样的:
- (id)init {
if (self = [super init]) {
array = [NSMutableArray new];
}
return self;
}
您的问题是,您没有致电super
的初始设定并将其分配给self
和然后设置array
。您在获得正确的对象之前分配array
,然后您甚至没有返回array
已设置的任何内容,而是返回超类init
的结果array.count
1}}方法。然后,当您开始记录array
时,nil
为i
,因此0
变为nil
(因为在这种情况下,消息{{1}}会返回0)