如何解决无法更改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中,并为它提供所选的\“ Employee \”,因此该实例具有一个可与之合作的员工。我肯定知道,它可以获取给定的雇员,因为NSLog总是正确地打印出来。
名为\“ mikk \”的NSTextField在IB中已正确链接,因为它在awakeFromNib方法中将标签文本设置为\“ hello \”。所以主要的问题是:为什么我不能在其他地方设置标签文本?
我知道这看起来很奇怪/愚蠢,但请告诉我,如果您需要更多信息(如果可以的话,还可以提供什么信息)以及使该文本更具可读性的建议。
编辑:查看代码,仅保留\“ i-think-important-bits \”。还保留了IBOutlet,对目标没有任何影响。
解决方法
您正在使用垃圾收集吗?这是有关笔尖加载文档关于垃圾回收下的对象保留的内容:
图中的大多数对象都保存在
通过强大的参考记忆
在对象之间。只有
nib文件中的顶级对象
最初没有强大的参考资料。
因此,您的代码必须创建强大的
引用这些对象以防止
对象图被释放。
因此,如果您对包含文本视图(可能是视图或窗口)的顶级对象没有很好的引用,则可能正在收集整个对象图。
, 尝试改变
@property (assign) IBOutlet NSTextField *mikk;
至
@property (retain) IBOutlet NSTextField *mikk;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。