【发布时间】:2009-01-14 09:28:16
【问题描述】:
我对 NSPersistentDocument 进行了子类化。我也重命名了窗口。但是当我运行应用程序时,我得到应用程序窗口的标题为“无标题”。没有可用于更改标题的 -setTitle: 方法。有什么想法我该怎么做?
【问题讨论】:
我对 NSPersistentDocument 进行了子类化。我也重命名了窗口。但是当我运行应用程序时,我得到应用程序窗口的标题为“无标题”。没有可用于更改标题的 -setTitle: 方法。有什么想法我该怎么做?
【问题讨论】:
您是否通过向窗口发送setTitle: 来设置标题?
如果是这样,那就错了。改为设置文档的displayName。 (记住,NSPersistentDocument 是 NSDocument 的子类。)
【讨论】:
您不更改标题,您的用户通过保存文档来更改。
【讨论】:
您可以将Window的标题绑定到文档并使用Key-Value-Observation对其进行更新。
使用 Interface Builder 选择 MyDocument.xib 的“窗口”并移至检查器中的“绑定”选项卡。检查“标题”以绑定到“文件所有者”和“模型密钥路径”为“标题”。
然后在 NSPersistentDocument 的子类中添加此代码
@interface MyDocument : NSPersistentDocument {
NSString * _title;
}
@end
@implementation MyDocument
//P All kinds of all your good stuff here
- (NSString *) title {
return _title;
}
@end
现在如果你想改变窗口的标题,你可以使用 KVO。例如
- (BOOL)readFromURL:(NSURL *)absoluteURL
ofType:(NSString *)typeName
error:(NSError **)outError {
//P All your good code
[self willChangeValueForKey:@"title"];
_title = [absoluteURL lastPathComponent];
[self didChangeValueForKey:@"title"];
//P More good code
}
【讨论】: