无法更改NSTextField文本

时间:2011-06-16 14:01:35

标签: objective-c cocoa nstextfield

我的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  

它可能看起来像f-d,但重点是我称之为方法

- (void)setSelectedEmployee:(Employee*)employeeIn

在我的appDelegate中,并为其选择“员工”,因此该实例有一名员工可以使用。我肯定知道它会得到给定的员工,因为 NSLog 总是正确地打印出来 名为“mikk”的 NSTextField 在IB中正确链接,因为它在 awakeFromNib 方法中将标签文本设置为“hello”。所以主要的问题是:为什么我不能在其他地方设置标签文本?

我知道这看起来很奇怪/愚蠢,但请告诉我,如果您想了解更多信息(还有什么,如果您可以更具体)以及建议使这个文本更具可读性。

编辑:查看代码,只留下“i-think-important-bits”。还保留了IBOutlet,对目标没有任何影响。

2 个答案:

答案 0 :(得分:1)

尝试更改

@property (assign) IBOutlet NSTextField *mikk; 

@property (retain) IBOutlet NSTextField *mikk; 

答案 1 :(得分:0)

你在使用垃圾收集吗?以下是docs on nib loading关于垃圾收集下的对象保留的说法:

  

图表中的大多数对象都保留在   记忆通过强有力的参考   对象之间。只有   nib文件中的顶级对象   最初没有强大的参考。   因此,您的代码必须创建强大   引用这些对象来防止   对象图被释放。

因此,如果您没有对包含文本视图的顶级对象(可能是视图或窗口)的强引用,则可能正在收集整个对象图。