не может изменить текст NSTextField - PullRequest
0 голосов
/ 16 июня 2011

У меня проблема с NSTextField - я не могу изменить текст в нем (могу изменить его один раз, в (void) awakeFromNib , но не после этого).

Я дам вам мой заголовок и реализацию здесь:

#import <Cocoa/Cocoa.h>
#import "Employee.h"


@interface EmployeeView : NSViewController {  
    NSTextField *mikk;  
    Employee *employee;  
}

@property (retain) IBOutlet NSTextField *mikk;  
@property (retain) Employee *employee;

- (void)setSelectedEmployee:(Employee*)employeeIn;

@end


#import "EmployeeView.h"


@implementation EmployeeView

@synthesize mikk, employee;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil  
{  
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];  
    if (self) {  
        // Initialization code here.  
    }  

return self;  
}  

- (void)setSelectedEmployee:(Employee*)employeeIn  
{  
    employee = employeeIn;  
    NSLog(@"given employee = %@", employee.fullName);
    [mikk setStringValue: @"hi"];  
}  

-(void)awakeFromNib  
{  
    NSLog(@"i awoke");  
    [mikk setStringValue:@"hello"];
}  

- (void)dealloc  
{  
    [employee release];  
    [mikk release];  
    [super dealloc];  
}  

@end  

Может показаться, но суть в том, что я вызываю метод

- (void)setSelectedEmployee:(Employee*)employeeIn

в моем appDelegate и присвойте ему "Employee", который выбран, таким образом, у экземпляра есть сотрудник для работы. Я точно знаю, что получает данного сотрудника, потому что NSLog всегда печатает его правильно.
NSTextField , называемый "mikk", правильно связан в IB, потому что он устанавливает для текста меток значение "привет" в методе awakeFromNib . Итак, главная проблема: почему я не могу установить текст метки в другом месте?

Я знаю, что это выглядит странно / глупо, но, пожалуйста, дайте мне знать, если вам нужна дополнительная информация (а также что, если вы можете быть более конкретным) и предложения, чтобы сделать этот текст более читабельным.

Редактировать : просмотрел код и оставил только «i-think-важные-биты». Также сохранил IBOutlet без какого-либо влияния на цель.

Ответы [ 2 ]

1 голос
/ 17 июня 2011

Попробуйте изменить

@property (assign) IBOutlet NSTextField *mikk; 

на

@property (retain) IBOutlet NSTextField *mikk; 
0 голосов
/ 17 июня 2011

Вы используете сборщик мусора?Вот что документы по загрузке пера говорят о сохранении объектов при сборке мусора:

Большинство объектов на графике хранятся в памяти благодаря сильным ссылкам между объектами.Только объекты верхнего уровня в nib-файле изначально не имеют сильных ссылок.Таким образом, ваш код должен создавать строгие ссылки на эти объекты, чтобы предотвратить освобождение графа объектов.

Итак, если у вас нет строгой ссылки на объект верхнего уровня, содержащий ваш текстПредставление, возможно, представление или окно, возможно, собирается весь граф объектов.

...