Добавление временного объекта в NSMutableArray - PullRequest
1 голос
/ 19 февраля 2012

У меня есть пользовательский класс MDRect, который я пытаюсь добавить NSMutableArray

массив является свойством:

@property (retain) NSMutableArray* array; 

он инициализируется в initMethod подкласса NSView:

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

Но объект не добавляется в массив.он никогда не возвращает никакого значения, кроме 0 в функции NSLog.Что я делаю не так?

1 Ответ

5 голосов
/ 19 февраля 2012

Ваша проблема - ваш init метод.Вы неправильно поняли, и это должно выглядеть так:

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

Ваша проблема в том, что вы не вызываете init super, а назначаете его на self и затем настройка array.Вы присваиваете array еще до того, как получили правильный объект, и затем вы даже не возвращаете ничего, на что было установлено array, а скорее возвращаете результат init метода суперкласса.Затем, когда вы заходите в журнал array.count, array равен nil и, следовательно, i становится 0 (потому что обмен сообщениями nil возвращает 0 в этом случае).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...