我的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,对目标没有任何影响。
答案 0 :(得分:1)
尝试更改
@property (assign) IBOutlet NSTextField *mikk;
到
@property (retain) IBOutlet NSTextField *mikk;
答案 1 :(得分:0)
你在使用垃圾收集吗?以下是docs on nib loading关于垃圾收集下的对象保留的说法:
图表中的大多数对象都保留在 记忆通过强有力的参考 对象之间。只有 nib文件中的顶级对象 最初没有强大的参考。 因此,您的代码必须创建强大 引用这些对象来防止 对象图被释放。
因此,如果您没有对包含文本视图的顶级对象(可能是视图或窗口)的强引用,则可能正在收集整个对象图。