2012-02-18 2 views
1

У меня есть пользовательский класс MDRect, что я пытаюсь добавить NSMutableArrayДобавление временного объекта к 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. Что я делаю не так?

ответ

5

Ваша проблема заключается в вашем методе init. Вы получили это совершенно неправильно, и это должно выглядеть следующим образом:

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

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

+0

спасибо! это исправило мою проблему! –

Смежные вопросы