基本上我想使用一个 nib 文件和视图控制器作为我计划创建多次的视图的模板。这个笔尖将有几个标签和自定义视图。这个想法是,我将遍历一个对象数组,并为每个对象创建一个此控制器的实例,并将一个属性设置为数组中对象的属性。
目前这一切都很好,除了一件事 - 当我调用 setStringValue: 时标签不会更新!
我正在使用视图控制器代码中的一种方法进行更改,但它不起作用,我猜测 IBOutlet 没有正确连接,这很奇怪,因为自定义视图连接完美。
有任何想法吗?
基本上我想使用一个 nib 文件和视图控制器作为我计划创建多次的视图的模板。这个笔尖将有几个标签和自定义视图。这个想法是,我将遍历一个对象数组,并为每个对象创建一个此控制器的实例,并将一个属性设置为数组中对象的属性。
目前这一切都很好,除了一件事 - 当我调用 setStringValue: 时标签不会更新!
我正在使用视图控制器代码中的一种方法进行更改,但它不起作用,我猜测 IBOutlet 没有正确连接,这很奇怪,因为自定义视图连接完美。
有任何想法吗?
在 awakeFromNib 上设置断点并在调试器中查看标签 outlet 的值是什么。在调用 awakeFromNib 之前,所有插座都应该已连接。如果它仍然为零,那么你就有了答案。调用 setStringValue: on nil 完全是“无”。在这种情况下,您没有正确绑定插座,或者您曾经正确绑定过它,后来更改了名称,在这种情况下,Xcode4 或界面生成器中应该有一个黄色警告三角形,表明有问题;但是它不会阻止您的应用程序构建或运行,出口只会在对象创建后保持其初始值(即 nil)。
当您分配 NSViewControllers 时,只需使用 NIB 名称进行初始化:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
感谢您的回复,他们很有帮助,但并不完全符合我的意思。我最终通过创建一个空的 NIB 并用自定义的 NSView 和一些其他控件填充它来解决它。我为这些控件创建了一个带有 IBOutlets 的 NSView 子类,并将自定义视图的标识设置为我在界面生成器中的子类。每次我想绘制它时让它工作的诀窍是在我的子类中创建一个类方法,该方法将加载 nib 并以我想要的方式返回视图设置。
下面的代码:
+(id)todoViewFromNibWithFrame:(NSRect)frameRect todoList:(TodoList *)aTodoList
{
NSNib *todoViewNib = [[NSNib alloc] initWithNibNamed:@"TodoView" bundle:nil];
NSArray *objects = nil;
id todoView = nil;
[todoViewNib instantiateNibWithOwner:nil topLevelObjects:&objects];
for (id object in objects) {
if ([object isKindOfClass:[self class]]) {
todoView = object;
[todoView setTodoList:aTodoList];
break;
}
}
[todoViewNib release];
return todoView;
}
再次感谢您的回复!史蒂夫