将临时对象添加到NSMutableArray

时间:2012-02-18 21:45:44

标签: objective-c cocoa nsarray

我有一个自定义类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以外的任何值。我做错了什么?

1 个答案:

答案 0 :(得分:5)

您的问题是init方法。你错了,看起来应该是这样的:

- (id)init {
    if (self = [super init]) {
        array = [NSMutableArray new];
    }
    return self;
}

您的问题是,您没有致电super的初始设定并将其分配给self然后设置array。您在获得正确的对象之前分配array,然后您甚至没有返回array已设置的任何内容,而是返回超类init的结果array.count 1}}方法。然后,当您开始记录array时,nili,因此0变为nil(因为在这种情况下,消息{{1}}会返回0)